2013-03-09 3 views
2

Что я хочу сделать:читать и писать один и тот же текстовый файл

  • Открыть текстовый файл
  • Прочитайте содержание
  • сделать некоторые изменения на нем
  • записать его обратно в файл

Теперь измененный текст должен содержать только измененный контент, но не исходный контент.

Можем ли мы реализовать это, установив только параметр режима с помощью функции open()?

Если да, каков должен быть параметр?
Если нет, можем ли мы реализовать это только с помощью инструкции?

я реализую это с 2 с заявлениями в качестве следующего

replace_pattern = re.compile(r"<.+?>",re.DOTALL) 

def text_process(file): 

    with open(file,'r') as f: 
     text = f.read() 

    with open(file,'w') as f: 
     f.write(replace_pattern.sub('',text)) 

ответ

3

Если вы хотите, чтобы заменить текст в файле с «фиксированной» версии, вы должны либо повторно открыть файл или открыть он в r+ (чтение + запись) режим и укоротить до того письма:

with open(file,'r+') as f: 
    text = f.read() 
    f.seek(0) 
    f.truncate() 
    f.write(replace_pattern.sub('',text)) 

Если вы не обрезает файл первым, то вы рискуете выписывая слишком мало новых байт. Вы читаете foo bar baz и выписываете foo spam, тогда ваш файл заканчивается как foo spambaz, так как старые данные не удаляются и были длиннее.

+0

Режим «r +» также позволяет «прямую» запись в файл, используя 'f.seek (some_position)' then 'f.write (some_bytes)' не так ли? – heltonbiker

+0

@heltonbiker: Добавлено, почему вы хотите сначала усечь. –

+0

Сначала вам нужно искать 0, или вы начнете запись в позицию, где закончился старый текст (с пустым началом). – poke

Смежные вопросы