2024-04-26 03:58:33 发布
网友
我在尝试拆分一个很大的字符串时遇到内存错误。在
data = load_data(file_name) # loads data string from file splited_data = data.split('\n\n')
为什么会这样?如何修复? 使用Python2.7
函数load_data正在将整个文件读入内存中,显然内存不足。所以你必须放弃先读后处理的想法。取而代之的是,一次读一行文件,并在得到这些行时对其进行处理。在
load_data
这将以与data.split('\n\n')相同的方式将文件拆分为字符串,但一次只能分割一行:
data.split('\n\n')
with open("mybigfile.txt", "r") as f: for line in f: mydata = line.rstrip() if mydata: do_something_with(mydata)
如果要逐个处理字符串的各个部分,则可以使用生成器分别发出每个部分;这将减少使用的内存量,因为您不会像使用str.split那样生成所有部分的列表。在
str.split
>>> s = 'abc\n\ndef\n\nghi' >>> def splitter(s): ... chars = [] ... for x in s: ... chars.append(x) ... # Check for split characters and yield string ... if chars[-2:] == ['\n', '\n']: ... yield ''.join(chars[:-2]) ... chars = [] ... yield ''.join(chars) ... >>> >>> for word in splitter(s): ... print word ... abc def ghi
函数
load_data
正在将整个文件读入内存中,显然内存不足。所以你必须放弃先读后处理的想法。取而代之的是,一次读一行文件,并在得到这些行时对其进行处理。在这将以与
data.split('\n\n')
相同的方式将文件拆分为字符串,但一次只能分割一行:如果要逐个处理字符串的各个部分,则可以使用生成器分别发出每个部分;这将减少使用的内存量,因为您不会像使用
str.split
那样生成所有部分的列表。在相关问题 更多 >
编程相关推荐