Python 尝试拆分大字符串时出现内存错误
Python MemoryError trying to split large string
我在尝试拆分一个非常大的字符串时遇到内存错误。
data = load_data(file_name) # loads data string from file
splited_data = data.split('\n\n')
为什么会这样,如何解决?
使用 python 2.7
如果您正在逐个处理字符串的各个部分,您可以使用生成器分别发出每个部分;这将减少使用的内存量,因为您不会像使用 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')
相同,但一次一行:
with open("mybigfile.txt", "r") as f:
for line in f:
mydata = line.rstrip()
if mydata:
do_something_with(mydata)
我在尝试拆分一个非常大的字符串时遇到内存错误。
data = load_data(file_name) # loads data string from file
splited_data = data.split('\n\n')
为什么会这样,如何解决? 使用 python 2.7
如果您正在逐个处理字符串的各个部分,您可以使用生成器分别发出每个部分;这将减少使用的内存量,因为您不会像使用 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')
相同,但一次一行:
with open("mybigfile.txt", "r") as f:
for line in f:
mydata = line.rstrip()
if mydata:
do_something_with(mydata)