Python,解析 30MB 文件时遇到内存错误(已下载到我的本地计算机)

标签 python file-io

这是我的下载地址,文件名为'kosarak'

http://fimi.uantwerpen.be/data/

我的解析代码是:

parsedDat = [line.split() for line in open('kosarak.dat').readlines()]

我需要将这些数据作为一个整体来运行一些方法,所以一行一行地读取并在每一行上进行操作在这里不适合我。

文件只有30MB,我的电脑至少还有10G内存和30+G硬盘空间,所以我猜应该不会有什么资源问题

仅供引用:我的 python 版本是 2.7,我在 Spyder 中运行我的 python。我的操作系统是 Windows 10。

PS:你不需要使用我的解析代码/方法来完成这项工作,只要你能从文件中获取数据到我的python环境就完美了。

最佳答案

也许这会有所帮助。

with open('kosarak.dat', 'r') as f:  # Or 'rb' for binary data.
    parsed_data = [line.split() for line in f]

不同之处在于您的方法一次读取文件中的所有行,然后处理每一行(实际上需要 2 倍内存,一次用于文件数据,一次用于解析数据,所有这些都必须存储在内存),而这种方法只是逐行读取文件,并且只需要内存用于生成的 parsed_data

此外,您的方法没有明确关闭文件(尽管您可能只是没有显示那部分代码)。此方法使用上下文管理器 (with expression [as variable]:),它会在 with block 终止后自动关闭对象,即使出现错误也是如此。参见 PEP 343 .

关于Python,解析 30MB 文件时遇到内存错误(已下载到我的本地计算机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091084/

相关文章:

jquery - 使用 jQuery 插入文件输入元素

file - Erlang 文件 I/O : Large binary files and gzip streaming

c# - "Add to My Drive"按钮背后的代码

带参数的 Python 函数不起作用

python - 与 MEMORY 的 OBJECTS numpy 数组相比,列表列表的优点/缺点是什么?

python - 使用 Runge-Kutta 求解耦合微分方程

c - 有没有办法让 scanf 从文件中读取

python - 使用DOT的带有oAuth2的Django DRF(django-oauth-toolkit)

python - Azure Functions - 无法在调用的脚本中导入其他Python模块

python - 使用 np.load 后关闭文件(使用 Spyder)