2015-10-18 220 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(),你可以返回之前增加一个字典条目保存条目的文件名。