2013-05-28 2 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 아, 그걸 보지 못했습니다. –