2017-04-18 54 views
1

編輯:我寫的問題沒有縫讓我一直在尋找答案的方式。這是我認爲更清楚的問題的簡短版本。使用列表打開文件?

我想利用下面的代碼,並凝結成詮釋一個for循環。

with open("vzt_notes", "r") as working_vzt_notes: 
    vzt_notes = json.load(working_vzt_notes) 
with open("rms_notes", "r") as working_rms_notes: 
    rms_notes = json.load(working_rms_notes) 
with open("nsr_notes", "r") as working_nsr_notes: 
    nsr_notes = json.load(working_nsr_notes) 
with open("py_notes", "r") as working_py_notes: 
    py_notes = json.load(working_py_notes) 
with open("vzt_keys", "r") as vzt_kw: 
    vzt_keys = json.load(vzt_kw) 
with open("rms_keys", "r") as rms_kw: 
    rms_keys = json.load(rms_kw) 
with open("nsr_keys", "r") as nsr_kw: 
    nsr_keys = json.load(nsr_kw) 
with open("py_keys", "r") as py_kw: 
    py_keys = json.load(py_kw) 

目前我一次打開所有文件。由於我將動態創建更多文件,因此我希望有一個for循環,可以打開我上面所做莊園中的所有文件。我嘗試了一些for循環,但是我可以做的一些工作就是將打開的文件中的所有字典存儲到一個大字典中。我不想這樣做。我需要讓for循環的結果執行與每次打開一個文件相同的任務,並將該變量命名爲與文件名相同並將文件內容存儲在該變量中。

+2

你沒有使用'cname = startname + file',你只是覆蓋它。看起來你對你的變量名稱感到困惑。 –

+0

任何地方都沒有'file_name'。這是產生錯誤的實際代碼? – dhke

+0

@Alex Hall我正在使用'cname'。它是在結束了'與open' –

回答

4

它看起來像你想新的變量編程方式添加到全球範圍內。爲什麼不把你的筆記存儲在字典中呢?這是一種實現你想要的方法。

import json 

def json_loader(filename): 
    with open(filename) as f: 
     return json.load(f) 


def load_files(filenames): 
    return (json_loader(filename) for filename in filenames) 


filenames = [ 
    'vzt_notes', 'rms_notes', 'nsr_notes', 
    'py_notes', 'vzt_keys', 'rms_keys', 
    'nsr_keys', 'py_keys', 
] 

vzt_notes, rms_notes, nsr_notes, \ 
    py_notes, vzt_keys, rms_keys, \ 
    nsr_keys, py_keys = load_files(filenames) 

print(list(load_files(filenames))) 

通過上述方法,它可能是更好(更安全)爲維護你的代碼要做到這一點:在文件名

vzt_notes = json_loader('vzt_notes') 
rms_notes = json_loader('rms_notes') 
... 
+0

我所有的筆記都存儲在一個文件字典中。該列表用於存儲每個文件的名稱,以便我可以使用該列表打開所有文件。編輯:列表中的每個字符串與不同字典的文件名相對應。 –

+0

我明白這是做什麼。我必須運行它才能理解。因此,因爲這是將文件中的所有字典存儲在一個大字典中,那麼我將不得不改變我所有其他函數如何查找字典。 –

+0

我想我可以這樣做。我真的想通過使用for循環來重現我的代碼的第一部分。我寧願不將每個文件(每個文件都有一個字典)存儲在一個大型字典中。我希望將它們導入到自己的字典中,並使用文件名作爲變量名稱。 –

1

這是我想你想實現:

for file_suffix in file_list: 
    prefix = "working_" 
    filename = prefix + file_suffix 
    with open(filename, "r") as file_obj: 
     data = json.load(file_obj) 

所有我做的是改變變量名,使他們不衝突。

+0

我仍然收到相同的錯誤。它必須與我的其他函數如何調用file_name相關。 –

+0

如果您有時間查看,我簡化了我的問題。我想我把這個情況和我冗長的問題混淆了。 –

0

迭代,打開每一個,加載的文件附加到列表函數返回。

file_list =[ "vzt_notes","rms_notes","nsr_notes","py_notes","vzt_keys","rms_keys","nsr_keys","py_keys" ] 

def loadFiles(event=None): 
    loaded_file_list = [] 
    for filename in file_list: 
     # You can reuse the file handle f 
     with open(filename, "r") as f: 
      loaded_file_list.append(json.load(f)) 
    return loaded_file_list 

loaded_files = loadFiles()