Я пытаюсь избавиться от некоторых строк ошибок в очень большом файле (200 ГБ в Windows), код в основном выглядит следующим образом
with open(filename, encoding='utf-8') as fi:
with open(outputfile, 'w', encoding='utf-8') as fo:
while True:
try:
line = next(fi)
fo.write(line)
except UnicodeDecodeError:
line = next(fi)
continue
Однако я получил это OSError: [Errno 22] Invalid argument
из строки line = next(fi)
внутри блока try после обработки около 30 ГБ данных. Какова возможная причина этого? как я мог справиться с этим?
Также я заметил странное поведение выделения памяти вокруг этой точки: сначала он увеличивается до полного объема памяти, а затем снижается до исходного уровня, хотя я не знаю, является ли это уместным или просто совпадением.
Полная трассировка стека
Traceback (most recent call last):
File "C:/Users/concat_split_files.py", line 23, in <module>
line = next(fi)
OSError: [Errno 22] Invalid argument
РЕДАКТИРОВАТЬ Вот точный код, основное отличие в том, что, поскольку я уже успешно проверил часть файла, я пропустил первые несколько строк (30 ГБ).
filename = r"data.tsv"
outputfile2 = r"p2.tsv"
line_no = 306878
with open(filename, encoding='utf-8') as fi:
for _ in range(line_no):
try:
next(fi)
except UnicodeDecodeError:
line = next(fi)
print(line)
continue
with open(outputfile2, 'w', encoding='utf-8') as fo2:
while True:
try:
line = next(fi)
fo2.write(line)
except UnicodeDecodeError:
line = next(fi)
print(line)
continue
except StopIteration:
break