Подтвердить что ты не робот

Можно ли изменить строки в файле на месте?

Можно ли проанализировать файл по строкам и отредактировать строку на месте при прохождении строк?

4b9b3361

Ответ 1

Можно ли проанализировать файл по строкам и отредактировать строку на месте при прохождении строк?

Он может быть смоделирован с использованием резервного файла в виде stdlib fileinput module.

Вот пример script, который удаляет строки, которые не удовлетворяют some_condition из файлов, указанных в командной строке, или stdin:

#!/usr/bin/env python
# grep_some_condition.py
import fileinput

for line in fileinput.input(inplace=True, backup='.bak'):
    if some_condition(line):
        print line, # this goes to the current file

Пример:

$ python grep_some_condition.py first_file.txt second_file.txt

При завершении first_file.txt и second_file.txt файлы будут содержать только строки, которые удовлетворяют предикату some_condition().

Ответ 2

Нет. Вы не можете безопасно писать в файл, который вы также читаете, так как любые изменения, внесенные вами в файл, могут перезаписывать контент, который вы еще не читали. Чтобы сделать это безопасно, вам нужно будет прочитать файл в буфер, обновить любые строки по мере необходимости, а затем перезаписать файл.

Если вы заменяете байты для байта содержимым в файле (т.е. если текст, который вы заменяете, имеет ту же длину, что и новая строка, которую вы заменяете), вы можете уйти с ним, но это гнездо шершней, поэтому я бы избавил себя от хлопот и просто прочитал полный файл, заменил содержимое в памяти (или через временный файл) и снова запустил его.

Ответ 3

Если вы намерены выполнять только локализованные изменения, которые не изменяют длину части файла, который был изменен (например, изменение всех символов на нижний регистр), вы можете реально перезаписать старое содержимое файла динамически.

Для этого вы можете использовать произвольный доступ к файлам с помощью метода seek() объекта file.

Кроме того, вы можете использовать объект mmap для обработки всего файла как изменяемой строки. Имейте в виду, что объекты mmap могут устанавливать максимальный размер файла в диапазоне 2-4 ГБ на 32-битном ЦП, в зависимости от вашей операционной системы и ее конфигурации.

Ответ 4

Вам нужно создать резервную копию по размеру строки в символах. Предполагая, что вы использовали readline, вы можете получить длину строки и выполнить резервное копирование, используя:

file.seek(offset[, whence])

Установите значение SEEK_CUR, установите смещение на -length.

Смотрите Документы Python или посмотрите man-страницу для seek.