2012-06-01 13 views
1

입력 파일에 무엇을 가지고 있더라도 결국 빈 파일을 제공하지만 다음과 같은 이유가 있습니다. 이유는 알 수 없으므로 가능하면 도움을 요청하고 싶습니다. , 고맙습니다.빈 출력 파일

import re 
    import sys 
    import os 

    if len(sys.argv) > 1 : 
     inf = sys.argv[1] 
     if os.path.isfile(inf) : 
      pass 
     else : 
       print "Nincs ilyen file!" 
       sys.exit(0) 
    else : 
     print "Nincs argumentum!" 

    infile = open(sys.argv[1],"r") 
    outfile = open("out.txt","w") 

    for t in infile : 
     lista = t.split(";;;") 
    for i in range(0,len(lista)): 
     if lista[i] == "begin" : 
       outfile.write("def "+lista[i-1]+"\n") 
     elif lista[i] == "end;" : 
       outfile.write(lista[i+1]+"\n") 
     else : 
       outfile.write(" "+lista[i]+"\n") 

편집 :

심지어 그냥 출력 파일에 뭔가를 쓰기 가진 시도

,하지만 여전히 아무것도하지 않았다.

+4

http://whataveyoutried.com/ –

+1

'lista'는'infile'을 읽은 후 무엇을 포함합니까? – betabandido

답변

1

줄을 확인하기 전에 전체 파일을 읽습니다. 따라서 lista은 파일의 마지막 행을 나타냅니다. 아마도 두 번째 for 루프는 들여 쓰기 안에 첫 번째 것이므로 파일의 각 줄에 대해 실행됩니다.

또한 목록에 액세스하려면 for i in range(...)을 보내주십시오. 아기 예수가 울부 짖습니다. for item in lista가 훨씬 더 좋을 것입니다. 그러면 if item == "begin" 등등을 테스트하면됩니다.

+0

그는'lista [i-1]'과'lista [i-1]'이 필요하기 때문에리스트 인덱스가 필요합니다. 이것은'enumerate'를 요구합니다. – mgilson

+0

또는 그냥 좋은 구식 "주변의 마지막 가치를 유지"기법. – kindall

+0

그가 lista [i + 1]를 필요로하는 것을 제외하고는 참으로 (첫 번째 주석에 포함되어야한다고 생각 했었지만 우연히 둘 다'-'를 입력했습니다.) 당신은 보지 못했던 값을 유지할 수 없습니다 아직. – mgilson

2

출력 파일 작성이 끝나면 출력 파일을 닫는 것을 잊지 마십시오. 그렇지 않으면 쓰기 명령문이 저장되지 않습니다. 스크립트의 끝에

추가 :

outfile.close() 

가장 좋은 방법은 당신이뿐만 아니라에서 읽고있는 모든 파일을 닫습니다이기도합니다.

+0

그 때문에'with' 구조가 보이는 것보다 낫습니다. (예, 여전히 드물지만 ...) +1 – pepr