у меня есть большой файл на моем локальном диске, который содержит строку фиксированной длины в первой строке. Мне нужно программно заменить эту строку фиксированной длины с помощью python, не читая весь файл в памяти.
Я попытался открыть файл в режиме добавления и найти 0 позицию. А затем замените строку длиной 9 байт. Код также добавлен сюда, что я пробовал.
with open ("largefile.txt", 'a') as f:
f.seek(0,0)
f.write("123456789")
спасибо, но у меня есть очень большой файл, который работает в ГБ, поэтому создание дубликата файла было бы слишком медленным для меня.






Я думаю, вы просто хотите открыть файл для записи, не обрезая его, что было бы r+. чтобы сделать это воспроизводимым, мы сначала создадим файл, соответствующий этому формату:
with open('many_lines.txt', 'w') as fd:
print('abcdefghi', file=fd)
for i in range(10000):
print(f'line {i:09}', file=fd)
тогда мы в основном делаем то, что вы делали, но с правильным режимом:
with open('many_lines.txt', 'r+') as fd:
print('123456789', file=fd)
или вы можете использовать write напрямую, с:
with open('many_lines.txt', 'r+') as fd:
fd.write('123456789')
Примечание. Я открываю в r+, чтобы вы получили FileNotFoundError, если он не существует (или имя файла написано с ошибкой), а не просто слепо создаю крошечный файл.
Режимы open напрямую скопированы из C/POSIX API для fopen, поэтому использование a вызовет поведение, которое говорит:
Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
Я думаю, это может вам помочь: stackoverflow.com/questions/14947238/…