处理大量 .txt 文件(和整体大尺寸)的提示 - python?

Posted

技术标签:

【中文标题】处理大量 .txt 文件(和整体大尺寸)的提示 - python?【英文标题】:Tips for working with large quantity .txt files (and overall large size) - python? 【发布时间】:2020-01-07 21:54:40 【问题描述】:

我正在编写一个脚本来解析 txt 文件并将它们存储到我可以导出到 CSV 的 pandas 数据帧中。

当我使用

我正在处理大约 8000 个 .txt 文件,平均大小为 300 KB,因此总大小约为 2.5 GB。

我想知道是否可以获得有关如何使我的代码更高效的提示。

对于打开和读取文件,我使用:

filenames = os.listdir('.')
dict = 
for file in filenames:
    with open(file) as f:
        contents = f.read()
        dict[file.replace(".txt", "")] = contents

执行print(dict) 会使我的python 崩溃(至少看起来是这样)。 有没有更好的方法来处理这个问题?

此外,我还将dict 中的所有values 转换为小写,使用:

def lower_dict(d):
   lcase_dict = dict((k, v.lower()) for k, v in d.items())
   return lcase_dict
lower = lower_dict(dict)

我还没有尝试过(无法通过打开/阅读阶段),但我想知道这是否会导致问题?

现在,在我被标记为重复之前,我确实读过这个:How can I read large text files in Python, line by line, without loading it into memory?

但是,该用户似乎正在处理 1 个 5GB 的非常大的文件,而我正在处理总计 2.5GB 的多个小文件(实际上我的整个样本是 50GB 和 60,000 个文件)。所以我想知道我的方法是否需要有所不同。 对不起,如果这是一个愚蠢的问题,很遗憾,我对 RAM 和计算机处理方法领域并不精通。

非常感谢任何帮助。

谢谢

【问题讨论】:

如何在将此类txt保存为csv之前更改其格式?是否有任何理由将 txt 内容保存在字典中? 对于文本文件,我计算特定单词并将其作为单独的键值对添加到我的字典中。 Keys = word1, word2, ..., value = 每个单词出现的次数。一旦我的字典被填充,我将它保存为 pd 中的数据框并导出到 csv - 这效率低吗?我应该完全使用数据框吗? 【参考方案1】:

我相信最让你的代码变慢的是你正在使用的 .replace() 方法。我相信这是因为内置的替换方法是迭代的,因此效率非常低。尝试在 for 循环中使用 re 模块。这是我最近如何使用该模块将键“T”、“:”和“-”替换为“”的示例,在本例中将它们从文件中删除:

for line in lines:
    line = re.sub('[T:-]', '', line)

如果这有帮助,请告诉我!

【讨论】:

shaun - 我刚刚开始尝试你的建议,并且可以确认你的怀疑是正确的 - 这就是问题所在!非常感谢您,您为我节省了很多时间!我以为我必须从头开始重建我的代码

以上是关于处理大量 .txt 文件(和整体大尺寸)的提示 - python?的主要内容,如果未能解决你的问题,请参考以下文章

如何把大量数据导入EXCEL

在 python 中有效地处理一个大的 .txt 文件

Linux命令word转TXT文件保持文本格局

Python 多处理写入 csv 数据以获取大量文件

打开大尺寸的 Sql Script

Windows批处理复制命令是啥?