【发布时间】:2020-01-07 23:31:39
【问题描述】:
我正在处理大量文件(约 8000 个)并将它们存储到字典中,处理值并分析它们,转换为 pandas 数据帧,然后输出到 csv。
这个问题是我在这里解决问题的尝试:Tips for working with large quantity .txt files (and overall large size) - python?
代码对于前 500 个左右的文件很好,但是当我使用完整示例时,我的计算机/python 崩溃了。
我的代码结构如下:
# For-loop 1
for file in filenames:
#do stuff
with open(file) as f:
# do more stuff
# For-loop 2
for k, v in dict():
#do stuff
dict3[k] = dict(Counter(new))
# convert dictionary to dataframe using pandas.
df = pd.DataFrame.from_dict(dict3, orient='index').fillna(0).astype(int)
# export dataframe to excel.
df.to_csv(r'path\example.csv',index = True, header=True)
我的问题是这样的:
如果我在前 500 个文件之后使用以下方法中断第一个 for 循环:
if file == "500":
break
有没有办法调整代码,以便在脚本运行后返回到第一个 for 循环并从文件 501-1001 开始迭代,直到我循环了 8000 个文件?
此外,我希望从最后一行附加 excel 输出以包含正在迭代的新文件集,而不是完全覆盖。
如果我的解决方案看起来参差不齐,我很想得到一些关于在哪里采取这个的反馈,因为我对 python 还是很陌生。
谢谢!
编辑:详细说明我要如何处理我的数据
目标:我有数千个 .txt 文件,我想在其中计算关键字,并将这些计数输出到 csv 中。
这是我的流程:
-
打开并读取 .txt 文件,并将其存储到字典中,如下所示:
dict1 ={'file1': '文件中所有内容的字符串', 'file2': '文件中所有内容的字符串', ... 'file_last': '文件中所有内容的字符串'} 现在我想将这个字典的所有值转换为小写。 我使用一个名为
lower_dict的用户定义函数来获取dict2 = lower_dict(dict1)现在我在
dict2中定义一个包含我想要计算的单词的列表。 filter_Words = ["word1", "word2", ... , "word_last"]for k, v in dict2.items():我统计每个文件中每个单词出现的次数,并存入一个新的dict,dict3
dict3 = {'file1': {'word1': 5, 'word2: 3'}, 'file2': {'word1': 12, 'word2: 0'}}
我将其导出到 pandas 数据框:
我将数据框导出到 csv,行是文件名,列是
word1, word2,...,条目是这些词在每个文件中出现的次数。
【问题讨论】:
-
使用
continue, docs.python.org/3/tutorial/…
标签: python-3.x for-loop while-loop break