首页 > 解决方案 > python3读取大文件耗尽内存

问题描述

我正在尝试在 Ubuntu 18.04.4 上的 Python 3(3.6 和 3.8)中读取一个大的基于行的文本文件,但是这样做会耗尽内存,因为缓冲区/缓存的使用会攀升以消耗所有可用的(物理)内存。

我已经搜索了很多答案,许多帖子中提供的标准解决方案是逐行阅读。但是,即使在逐行读取时也会发生这种行为 - 如下面的(简化示例)代码所示。

with open(file, 'r') as fp:
    for line in fp:
        pass

我还搜索了如何限制缓冲区/缓存的使用/大小,但找不到任何东西。不断清除缓存(例如,使用sudo echo 3 > /proc/sys/vm/drop_caches)不是一个可行的选择。

文件大小约为 20GB,物理 RAM 为 16GB,当我运行代码时,可用空间约为 12GB。

如何在不耗尽内存的情况下实际读取大文件?

任何帮助将不胜感激!

标签: python-3.x

解决方案


推荐阅读