Системная ошибка itertools для больших файлов
Я пытаюсь получить четные строки из моего очень большого файла (~300 ГБ), и я могу сделать это для файла почти того же размера, что и ошибка. Код является:
import itertools
import sys, os
with open('FILE.fasta') as f:
fd = open("FILE.txt","w")
fd.writelines(set(itertools.islice(f, 0, None, 2)))
fd.close()
И ошибка:
Traceback (most recent call last):
File "new3.py", line 7, in <module>
fd.writelines(set(itertools.islice(f, 0, None, 2)))
SystemError: Negative size passed to PyString_FromStringAndSize
Вы действительно думаете, что это потому, что файл слишком большой? Я проверил использование памяти во время работы кода, и она никогда не превышала 50%.
Буду признателен за любую помощь!
1 ответ
Не делай set
от основного итератора - это чрезвычайно дорогая процедура. Вы должны быть в состоянии дать этот итератор writelines
непосредственно:
fd.writelines(itertools.islice(f, 0, None, 2))
Другая маленькая гнида:
Вам не нужно писать
import sys, os
потому что вы уже импортировали sys
на линии выше. Удалите строку выше или напишите import os
,