我是python中的初学者,我正在尝试从python中的eml文件解析信息。我设置了extract
函数来解析我想要的内容。问题是我有10,000多个文件,我不知道如何将每个提取的信息添加到一个对象。
当我在一个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()
答案 0 :(得分:1)
看起来您想要使用文件中的数据将文件名映射到字典。要做到这一点,你会做类似的事情:
file_map = {}
for fname in FList:
with open(fname) as f:
file_map[fname] = extract(f, fname)
答案 1 :(得分:0)
您的循环中正在覆盖name
对象。由于名称是dict,并且dicts通过引用传递(谷歌通过引用传递获取更多信息),你可以这样做:
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
的循环后,您将使用所有文件中的所有信息填充名称,因为它将在整个循环中保留...
答案 2 :(得分:0)
这完全取决于您希望如何存储数据。如果您只想要一个条目列表,那么您只需要将提取的数据附加到列表中,如下所示:
name = []
for file_name in FList:
with open(file_name) as f:
name.append(extract(f, f.name))
在extract()
中,您可以添加另一个字典条目以保留条目的文件名,然后再返回。