2013-05-28 5 views
0

Предположим, у меня есть список файлов, и я хочу перебирать его, чтобы каждый читал его содержимое, отправляя контент функции processContent() и записывая все это в файл. Может ли следующий код быть подходящим способом для этого?Чтение и запись файлов в одной и той же итерации

for curfile in files: 
    with open(curfile, 'r+') as infile 
     content = infile.read() 
     processed_content = processContent(content) 
     infile.write(processed_content) 

Другими словами, чтение и письмо на одной и той же итерации.

+1

Я считаю, что вам нужно будет 'infile.seek (0)' до написания ... действительно вам нужно просто использовать 2 дескриптора ... –

+2

Я предпочитаю работать с временным файлом, а затем переименовывать его обратно в исходное имя файла. –

+0

@StevenRumbalski Я вижу, что вы говорите, но вызовет ли это проблему, так как я также повторяю файлы? –

ответ

4
for curfile in files: 
    with open(curfile, 'r+') as infile: 
     content = infile.read() 
     processed_content = processContent(content) 
     infile.truncate(0) # truncate the file to 0 bytes 
     infile.seek(0)  # move the pointer to the start of the file 
     infile.write(processed_content) 

Или использовать временный файл, чтобы записать новое содержимое, а затем переименовать его обратно в исходный файл:

import os 
for curfile in files: 
    with open(curfile) as infile: 
     with open("temp_file", 'w') as outfile: 
      content = infile.read() 
      processed_content = processContent(content) 
      outfile.write(processed_content) 
    os.remove(curfile) # For windows only 
    os.rename("temp_file", curfile) 

Если вы хотите обработать одну строку сразу попробуйте fileinput модуль

+0

Это работает, но мне это неудобно. Что-то об усечении и поиске чувствует себя слишком низко. –

+0

@ F3AR3DLEGEND Вопрос помечен py2.6 –

+0

@AshwiniChaudhary Ах, не видел этого. –

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