Как мне записать в файл блоками, чтобы обойти ошибку с большими размерами файла? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть очень простой кусок кода:

f = open('file.txt','w+')
f.write(result)
f.close()

Проблема в том, что строка 'result' может иметь размер до нескольких гигабайт.Хотя он успешно создан, запись его в файл приводит к этой ошибке:

OSError: [Errno 22] Invalid argument

Я читал, что это известная проблема с запуском Python в OS X (я использую 10.13 High Sierra),Как я могу разбить функцию записи на блоки, чтобы обойти ее?

(я также знаю, что это непреодолимая проблема в 32-разрядных версиях из-за присущих ограничений, но я использую 64-разрядную версию)

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Попробуйте писать кусками

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]


with open('file.txt','w+') as f:  
    for chunk in chunks(results, 1024):  # try to play with this number
        f.write(chunk)
0 голосов
/ 20 июня 2019

Если проблема действительно в нехватке памяти, вы можете попробовать добавить строку за строкой.

with open('output.txt', 'a') as f:
    for item in result:
        f.write(item)

В этом случае result - это список строк.Вы должны адаптировать это на основе содержания вашего result объекта.

...