2017-04-21 62 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

如果分配給變量的值是像字符串這樣的靜態值,並且變量如本例中提到的那樣彼此相關,則字典的使用是正確的方法。 –