Python MemoryError пытается разбить большую строку - PullRequest
0 голосов
/ 13 декабря 2018

Я получаю ошибку памяти при попытке разбить очень большую строку.

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

почему и как это можно исправить?работа с питоном 2.7

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Функция 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)
0 голосов
/ 13 декабря 2018

Если вы обрабатываете части строки одну за другой, вы можете использовать генератор для генерации каждой части отдельно;это уменьшит объем используемой памяти, потому что вы не будете генерировать список всех частей, как вы делаете с 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
...