2013-02-18 3 views
0

나는이 조각을 가지고 이상한 일이 벌어지고 :파이썬으로 파일을 플러시하는 방법은 무엇입니까?

out = open("./out.txt","w+") 
for line in open("./int.txt","r").readlines(): 
    for key in dic.keys(): 
     if line.count(key) > 0: 
      line = re.sub(key,dic[key],line) 
    print line 
    out.write(line) 

파이썬 쉘에 출력이 포함 된 바로 하나 인이 out 파일 만 포함 dic{} 상태에 따라 스위치 후 모든 라인 줄의 약 절반?

+1

입력 파일 또는 그 일부를 게시하여 의미를 알 수 있도록하십시오. – jozzas

답변

1

에서 시도의 out.flush()를 세척 할 필요가, 바로 디스크에 기록되지 않습니다 범위 끝에서 닫힙니다 (보기에 볼 때 최신 상태입니다). for 루프는 입력 파일로이 작업을 수행합니다.

with open("./out.txt", "w+") as out: 
    for line in open("./int.txt", "r"): 
     for key in dic.keys(): 
      if key in line: 
       line = re.sub(key, dic[key], line) 
     print line, 
     out.write(line) 

다른 몇 가지 사소한 변경 :

  • .readlines()은 effiency을 개선, 첫 번째 인스턴스 발견되면 linekey 검색을 중단합니다
  • if key in line:
  • 을 필요하지 않습니다.
  • print line,line 다음에 다른 개행을 추가하지 않습니다. line = line.replace(key, dic[key])이 충분 여부는 line에 정규 표현식을 검색하지 않는 때문에

또한, 고려하십시오.

+0

팁 덕분입니다. 내 질문은 왜 지금 작동합니까? 규칙적인 개방은 그렇지 않습니다. 자바/C에서 try catch를 사용하여 코드를 래핑해도 플로우가 변경되지 않습니다. – 0x90

+0

'with'와'try'를 혼동하지 말자.'with'는 * context * (C와 비슷한 언어의 "scope"와 유사하다)를 관리하기위한 것이다. 그것보다 조금 더 많은 것이 있지만, 그것은 완전히 다른 질문입니다! – Johnsyweb

1

파일은 항상 내가 그것을가되도록 출력 파일 핸들의 컨텍스트를 관리 할 수 ​​the with statement를 사용하는 것이 좋습니다 말

+1

음,'with' 지시어가 더 좋을 것입니다. 또한 스크립트를 수동으로 플러시하지 않더라도 스크립트 끝에서 (스트림 객체가 삭제 될 때) 자동으로 플러시되어야합니다. –

+0

코드에 대한 서라운드 컨텍스트가 무엇인지 확실하지 않습니다. 단편을 볼 수 있습니다 ... –

관련 문제