2013-02-18 58 views
0

我有這樣的片段和一個奇怪的事情是怎麼回事:如何刷新到Python中的文件?

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) 

輸出到Python的外殼是它包含正確的根據dic{}out文件只包含開關後,所有的行大約一半的線?

+1

請張貼您的輸入文件或其子集,以便我們能夠看到您的意思。 – jozzas 2013-02-18 02:52:37

回答

1

我建議使用the with statement管理輸出文件句柄的環境,使其沖洗 嘗試了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()不需要
  • if key in line:將停止line搜索key一旦發現一審,提高效率芻議。
  • print line,不會在line之後再添加一條新線。

還要考慮是否line = line.replace(key, dic[key])就足夠了,因爲您不是在line上搜索正則表達式。

+0

它的工作原理,感謝提示。我的問題是爲什麼現在它工作?那些常規開放沒有的東西。在java/c#中使用try catch封裝代碼不會改變流程。 – 0x90 2013-02-18 06:18:09

+0

不要將''與'和'try'混淆,'with'用於管理* context *(類似於C語言中的「範圍」),其中'try'用於管理* exceptions *。除此之外還有一點,但這是另一個問題! – Johnsyweb 2013-02-18 08:55:52

1

文件並不總是被寫入磁盤馬上,他們需要在年底

+1

那麼,'with'指令會更好。另外,即使不手動刷新它們,在腳本結尾(當流對象被銷燬時),它也應該自動刷新。 – 2013-02-18 02:54:08

+0

我不確定他的代碼的環繞聲上下文是什麼,只能看到該片段...... – 2013-02-18 02:54:55