Удалить строку из файла на месте
У меня есть.txt, и я хочу, чтобы скрипт Python что-то с ним делал.
Мой.txt выглядит примерно так:
- 27b23815-4cbb-dfae-3e6d-38f67ec4266e
- 81a090bd-8973-bc37-5c7b-dc1a18e8ddee
- 7e1bf596-88bc-d8fd-9aea-278d5c689eaa
- 0b365fb0-dea4-53a1-fd27-6cbf9721602c
- 1c317dcf-73f4-edf5-b6a1-ad663d2b507e
- 6db8342d-1afb-2777-1a7f-a5daad06d2db
И я хочу удалить первую строку.txt, если в 6-й строке что-то записано, но все без создания нового.txt из старого. Не могу понять суть этого:(
Я знаю, что могу удалить первую строку с помощью:
lines = file(idpath, "r").readlines()
del lines[0]
file(idpath,"w").writelines(lines)
Буду благодарен за любую помощь
2 ответа
Поскольку файловая парадигма представляет собой (байты) массив байтов, вы не можете просто удалить данные изнутри. Вместо этого вы делаете одно из следующих действий:
- сдвиньте назад все данные после фрагмента, который нужно удалить, чтобы перезаписать его, затем отрегулируйте размер файла
(старомодно, обычно используется с отображенными в память файлами или когда вы не можете позволить себе другую копию данных) - записать все полученные данные в новый файл, а затем переместить его поверх старого
(типично для пакетной обработки, так какmove
является атомарным и мгновенным в одной и той же файловой системе, может работать (в зависимости от ОС), даже если файл открыт чем-то другим, и вы можете проверить результаты перед применением изменения) - прочитайте все данные, которые нужно сохранить в памяти, затем обрежьте файл до нуля байтов и запишите новые данные
(типично для текстовых редакторов. Файл не может быть открыт для записи каким-либо другим способом, и в тот момент, когда вы его усекаете, старое содержимое теряется. OTOH, вам не нужны разрешения для создания другого файла и его перезаписи)
Я понял! Теперь, когда я это вижу, это довольно просто
f = open('file','r')
lines = f.readlines()
if lines[5]: del lines[0]