将变量列表转换为字符串

时间:2017-04-21 17:56:29

标签: python

我有一个我要迭代的命令列表,所以我将这些命令放入列表中。但是,我还希望将该列表用作字符串来命名一些文件。如何将变量名称转换为字符串?

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查询。我需要在查询名称后面命名文件。

谢谢!

4 个答案:

答案 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)