我正在尝试从我的大文件(~300GB)中获取偶数行,并且我能够为一个与我得到错误的大小几乎相同的文件执行此操作。代码是:
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%..
我将不胜感激任何帮助!
答案 0 :(得分:0)
不要从底层迭代器中创建set
- 这是非常昂贵的过程。您应该能够直接将此迭代器提供给writelines
:
fd.writelines(itertools.islice(f, 0, None, 2))
其他小尼特:
您无需撰写
import sys, os
因为您已经在上面的行中导入了sys
。删除上面的行或写下import os
。