Чтение в файле - изменение содержимого - запись в тот же файл

Я должен прочитать в файле, изменить разделы текста здесь и там, а затем записать в тот же файл.

В настоящее время я делаю:

f = open(file)
file_str = f.read() # read it in as a string, Not line by line
f.close()
#
# do_actions_on_file_str
#
f = open(file, 'w') # to clear the file
f.write(file_str)
f.close()

Но я бы предположил, что существует более питонический подход, который дает тот же результат.

Предложения?

Ответ 1

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

Но вы можете использовать диспетчер контекста, чтобы избежать явных закрытий.

with open(filename) as f:
    file_str = f.read()

# do stuff with file_str

with open(filename, "w") as f:
    f.write(file_str)

Ответ 2

Если вы работаете по строкам, вы можете использовать fileinput с inplace mode

import fileinput

for line in fileinput.input(mifile, inplace=1):
    print process(line)

если вам нужно обработать весь текст сразу, то ваш код может быть оптимизирован немного с with который заботится о закрытии файла:

with open(myfile) as f:
    file_str = f.read()
#
do_actions_on_file_str
#
with open(myfile, 'w') as f:
    f.write(file_str)