当我使用以下代码读取文件时:
lines=file("data.txt").read().split("\n")
我有以下错误
MemoryError
文件大小是
ls -l
-rw-r--r-- 1 charlie charlie 1258467201 Sep 26 12:57 data.txt
显然,文件太大,无法一次全部读入内存。
为什么不使用:
with open("data.txt") as myfile:
for line in myfile:
do_something(line.rstrip("\n"))
或者,如果您未使用Python 2.6和更高版本,则:
myfile = open("data.txt")
for line in myfile:
do_something(line.rstrip("\n"))
在这两种情况下,您都将获得一个迭代器,该迭代器可以像对待字符串列表一样对待。
编辑:由于您将整个文件读取为一个大字符串然后在换行符上进行拆分的方式将删除过程中的换行符,因此我在.rstrip("\n")
示例中添加了a
,以便更好地模拟结果。
问题内容: 此代码 运行约30秒后给出此错误消息 而这段代码 几乎可以立即完美运行,并产生10MB的文件。据我了解,流的要点是两个版本应该在大约相同的时间内运行,因为数据是相同的。即使每次迭代将s 的数量增加到100或1000,也几乎不会增加运行时间,并且写入1GB文件没有任何问题。在1e6次迭代中每次迭代编写一个字符也可以正常工作。 这里发生了什么? 问题答案: 发生内存不足错误是因为您没有等待
使用 Jersey 客户端将大文件作为 InputStream 时,文件的全部内容似乎在发送到服务器之前已缓冲到内存中。这会导致大文件出现问题,因为 JVM 的堆空间不足。如何防止泽西岛客户端出现此行为?服务器端的 JAX-RS 资源方法在发送数据时似乎没有此问题。 例如:
问题内容: 我正在运行django应用程序,其中包括matplotlib,并允许用户指定图形的轴。这可能会导致 “溢出错误:超出了Agg复杂度” 发生这种情况时,最多会占用100MB的RAM。通常,我会使用,和释放该内存,但是与该错误关联的内存似乎与该绘图对象无关。 有谁知道我该如何释放记忆? 谢谢。 这是一些给我Agg复杂度错误的代码。 问题答案: 我假设您可以至少运行一次您发布的代码。该问题仅
我遇到了一个python模块的问题,它无法处理导入大数据文件(文件targets.csv的权重接近1 Gb) 加载此行时会追加错误: 回溯: 我想知道有没有一种方法可以逐行打开targets.csv文件?同时也想知道这会减慢这个过程吗? 这个模块已经很慢了... 谢谢!
问题内容: 我的java appengine应用程序中有几个servlet,它们对内存进行排序并需要几秒钟的时间才能完成。这些完全没有错误。 但是,我最近为appengine启用了appstats并开始收到以下错误: 问题答案: 我想知道这是否可以帮助您减少OutOfMemoryErrors的发生: 如何减少Google App Engine Java上Appstats的内存使用量