我有一个我要迭代的命令列表,所以我将这些命令放入列表中。但是,我还希望将该列表用作字符串来命名一些文件。如何将变量名称转换为字符串?
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"
我希望fileName为" itemIDScore.txt"但是queryList中的itemIDS是我在其他地方使用的SQL查询。我需要在查询名称后面命名文件。
谢谢!
答案 0 :(得分:3)
我认为你不可能将变量的名称作为变量对象的字符串。但相反,您可以创建变量字符串列表:
queryList = ['itemIDScore', 'accountScore', 'itemWithIssue', 'itemsPerService']
然后,您可以使用globals()
函数从变量名字符串中访问变量的值:
for x in queryList:
fileName = "{}.txt".format(x)
data = globals()[x]
cur.execute(data)
正如globals()
document所说:
返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内部,这是定义它的模块,而不是调用它的模块)。
答案 1 :(得分:3)
据我所知,没有简单的方法可以做到这一点,但你可以简单地使用目前变量名称作为键的dict,例如:
queries = {
'itemIDScore': 'sql 1',
'accountScore': 'sql 2',
...
}
for x in queries:
fileName = x + ".txt"
cur.execute(queries[x])
print fileName
这也可以保留您想要的语义,而不会使代码的可读性降低。
答案 2 :(得分: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 :(得分:0)
您可以使用内置的str()函数。
for x in queryList:
fileName = str(x) + ".txt"
cur.execute(x)