Python MemoryError尝试拆分大字符串

时间:2018-12-13 13:20:23

标签: python python-2.7 python-2.x

尝试拆分很大的字符串时出现内存错误。

data = load_data(file_name) # loads data string from file
splited_data = data.split('\n\n')

为什么会这样以及如何解决? 使用python 2.7

2 个答案:

答案 0 :(得分:2)

函数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)

答案 1 :(得分:0)

如果要一一处理字符串的各个部分,则可以使用生成器分别发出每个部分;这样会减少使用的内存量,因为您不会像使用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