2015-10-18 226 views
0

我是一名Python初學者,我試圖從python中的eml文件中解析信息。我設置了我的extract函數來解析我想要得到的東西。問題是我有10,000多個文件,我不知道如何將每個提取的信息添加到一個對象。如何在python中循環添加字典項目

當我運行一個EML文件extract功能,輸出看起來像

{'from': 'Joe', 'to': 'Robert', 'text': 'Hey Robert'} 

輸出是dict對象。現在我想將提取的輸出附加到我現有的輸出(name)以收集來自name中10,000個文件的每個信息。我怎樣才能做到這一點?我使用了以下代碼,但name對象僅包含FList(這是每個10,000多個文件的列表)中最後一個文件的信息。

for i in range(len(FList)): 
    f = open(FList[i]) 
    name=extract(f, f.name) 
    f.close() 

回答

1

它看起來像你想用文件中的數據將文件名映射到字典。要做到這一點,你應該這樣做:

file_map = {} 
for fname in FList: 
    with open(fname) as f: 
     file_map[fname] = extract(f, fname) 
0

name對象被覆蓋在你的循環中。由於名字的意思是一個字典,和類型的字典按引用傳遞(上通過Google通過參考以獲得更多信息),你可以做這樣的事情:

names = dict() 
for my_file in file_lst: 
    with open(my_file) as f: 
     extract(f,names) 

def extract(f, names): 
    #modify your names dict here such as: 
    names["something new"] = "a new value" 

你與遍歷file_lst完成後您會有所有文件中的所有信息填充名稱,因爲它將保留在循環中...

0

這一切取決於您希望如何存儲數據。如果你只是想條目列表,那麼你只需要提取的數據添加到列表如下:

name = [] 

for file_name in FList: 
    with open(file_name) as f: 
     name.append(extract(f, f.name)) 

extract(),你可以返回之前增加一個字典條目保存條目的文件名。