Чтение и перезапись файла в Python
В настоящее время я использую это:
f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.close()
но проблема в том, что старый файл больше, чем новый файл. Таким образом, я получаю новый файл, который имеет часть старого файла на его конце.
4 ответа:
если вы не хотите закрывать и снова открывать файл, чтобы избежать условий гонки, вы можете
truncate
это:f = open(filename, 'r+') text = f.read() text = re.sub('foobar', 'bar', text) f.seek(0) f.write(text) f.truncate() f.close()
функциональность также может быть чище и безопаснее используя
with open as
в комментарии mVChr, который будет закрыть обработчик, даже если произойдет ошибка.with open(filename, 'r+') as f: text = f.read() text = re.sub('foobar', 'bar', text) f.seek(0) f.write(text) f.truncate()
наверное, было бы проще и аккуратнее закрыть файл после
text = re.sub('foobar', 'bar', text)
, повторно откройте его для записи (таким образом, очистив старое содержимое) и напишите в него свой обновленный текст.
The
fileinput
модульinline
режим для записи изменений в файл обрабатывается без использования временных файлов и т. д. Модуль красиво инкапсулирует общую операцию зацикливания по строкам в списке файлов, через объект, который прозрачно отслеживает имя файла, номер строки и т. д., Если вы хотите проверить их внутри цикла.import fileinput for line in fileinput.FileInput("file",inplace=1): if "foobar" in line: line=line.replace("foobar","bar") print line