Системная ошибка 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,

Другие вопросы по тегам