2017-04-21 52 views
1

我有我想要遍历的命令列表,因此我将这些命令放入列表中。但是,我也想使用该列表作为字符串来命名一些文件。如何将变量名称转换为字符串?将变量列表转换为字符串

itemIDScore = """SELECT * from anytime;""" 

queryList = [itemIDScore, accountScore, itemWithIssue, itemsPerService] 
    for x in queryList: 

    fileName = x+".txt" 
    cur.execute(x) #This should execute the SQL command 
    print fileName #This should return "itemIDScore.txt" 

我想文件命名为“itemIDScore.txt”但itemIDScore在queryList是一个SQL查询,我会在其他地方使用。我需要在查询名称后面命名文件。

谢谢!

+3

所以...你想要诸如“itemIDScore.txt”作为文件名吗?或者你想要变量itemIDScore的字符串值吗? – Prune

+0

我想要“itemIDScore.txt”用于其他功能,但我会在其他函数中调用itemIDScore的字符串值。 – Publiccert

+0

请**澄清您的具体问题或添加额外的细节,以突出显示您所需要的**。正如目前所写,很难确切地说出你在问什么。请参阅[如何提问](http://stackoverflow.com/help/how-to-ask)页面以获得帮助,澄清此问题 –

回答

3

我不认为你可以得到变量作为自变量对象的字符串名称。但是相反,你就可以创造变量的字符串列表:

for x in queryList: 
    fileName = "{}.txt".format(x) 
    data = globals()[x] 
    cur.execute(data) 

由于:

queryList = ['itemIDScore', 'accountScore', 'itemWithIssue', 'itemsPerService'] 

然后你可以使用globals()功能从变量名字符串访问变量的值globals() document说:

返回表示当前全局符号表的字典。这总是当前模块的字典(在函数或方法内部,这是定义它的模块,而不是调用它的模块)。

+1

工作,谢谢! – Publiccert

0

您可以使用内置的str()函数。

for x in queryList: 
    fileName = str(x) + ".txt" 
    cur.execute(x) 
+0

这会导致变量打印其字符串(这是一个非常长的SQL命令)。 – Publiccert

1

我想你会更容易明确地存储名称,然后评估它们以获取它们的值。例如,考虑这样的:

itemIDScore = "some-long-query-here" 
# etc. 
queryDict = dict((name,eval(name)) for name in ['itemIDScore', 'accountScore', 'itemWithIssue', 'itemsPerService']) 
for k in queryDict: 
    fileName = k+".txt" 
    cur.execute(queryDict[k]) 
3

据我所知,有没有简单的方法来做到这一点,但你可以只使用当前有哪些变量名称作为关键字,例如字典:

queries = { 
    'itemIDScore': 'sql 1', 
    'accountScore': 'sql 2', 
    ... 
} 

for x in queries: 
    fileName = x + ".txt" 
    cur.execute(queries[x]) 
    print fileName 

这也将保留您所需的语义,而不会使代码不易读。

+0

如果分配给变量的值是像字符串这样的静态值,并且变量如本例中提到的那样彼此相关,则字典的使用是正确的方法。 –