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

Tips for working with large quantity .txt files (and overall large size) - python?

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

我的脚本在我使用 <100 个文件时很容易工作 - 但现在当我尝试 运行 完整示例时,我 运行 遇到了很多问题。

我要处理约 8000 个平均大小为 300 KB 的 .txt 文件,因此总共大约 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)

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

现在,在我被标记为重复之前,我确实阅读了这篇文章: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 和计算机处理方法领域。

非常感谢任何帮助。

谢谢

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

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

如果有帮助请告诉我!