2012-07-26 5 views
0

다음 코드를 사용하여 텍스트 파일의 섹션을 새 임시 파일로 복사합니다. 임시 파일을 복사 할 파일과 같은 디렉터리에 만들려고합니다. print 문은 모두 크래쉬하기 전에 실행되는지 확인해야하며, pdb는 1을 인쇄 한 다음 코드 아래에서 오류를 줄 것입니다.파이썬에서 텍스트 파일의 일부를 복사 할 때 오류가 발생했습니다.

def copymp(mptfile): 
    print 1 
    temp = os.path.dirname(mptfile) + '/mpdata.tmp' 
    print 2 
    mpfile = open(temp, 'w') 
    print 3 
    copyline = False 
    for line in mptfile: 
     print 4 
     if line.startswith('MP'): 
      copyline = True 
      print 5 
     if copyline: 
      print 6 
      print>>mpfile, line 
      copyline = False 
    mpfile.seek(1) 
    return None 

오류 : http://i.imgur.com/fqfsi.jpg

+0

그 네 번째 print 문은 멀리까지 실행하면 IndentationError를 제공합니다. –

+1

나는 또한 당신이하려는 것을 혼란스러워합니다. 왜 copyline을 true로 설정합니까? copyline 변수를 가지지 않고 직접 줄을 인쇄하면 어떨까요? –

+0

@RobVolgman : 코드가 실행되기 전에 들여 쓰기 오류가 컴파일 중에 발생합니다. –

답변

2

os.path.dirname()에 매개 변수가 문자열이어야합니다,하지만 당신은 분명히 파일 객체를 전달한다. (의도 했습니까?) 시도해보십시오

temp = os.path.dirname(mptfile.name) + '/mpdata.tmp' 

대신에보십시오.

(사이드 노트 : 추적 표시를 자세히 살펴 봐야합니다. 추적 표시에 오류가 발생하는 행이 표시되어 있습니다.이 경우 인쇄 문을 분리 할 필요가 없습니다.이 경우 호출이 표시됩니다. os.path.dirname()가 실패하고 있으므로 문제를 진단하려면 설명서를 확인해야합니다.)

+0

편집 : 마술. 감사! – zakparks31191

0

파이썬에서 tempfile 모듈을 사용해보십시오. 원본 파일이있는 동일한 디렉토리에 임시 파일을 만드는 것이 중요합니까? 그렇지 않은 경우 제안, 당신은 당신이 파일 객체에서 경로를 얻거나 사용하려고 라인 잊을 수

temp = os.path.dirname(mptfile.name) + '/mpdata.tmp' 

어쨌든, 대부분의 시간은 당신이 TEMPFILES 직접 관리하지 않는, 그건 왜 파이썬의 임시 파일 모듈이 존재 하는가?

관련 문제