2012-12-25 60 views
1
final=open("war.txt","w+") 
for line in madList: 
    line=line.split('A ') 
    dnsreg= line[1] 
    print dnsreg 
    final.write(dnsreg) 

雖然打印dnsreg我可以看到輸出,但是當我將它寫入文件時,沒有任何內容正在寫入。沒有語法錯誤。任何想法?數據沒有寫入文件[Python]

+1

你正在關閉文件嗎? –

+0

@Diego No Mate。我不是 。 – oldnoob

+0

您應該 - 刷新緩衝區並提交寫入文件。 – dda

回答

1

在使用必須設置和拆除的資源(如打開和關閉文件)時,您應該在Python中使用with語句。喜歡的東西:

with open("war.txt","w+") as myFile: 
    for line in madList: 
     line=line.split('A ') 
     dnsreg= line[1] 
     myFile.write(dnsreg) 

如果你不想使用with,你必須手動關閉該文件。在這種情況下,您可以使用try...finally塊來處理此問題。

try: 
    myFile = open("war.txt", "w+") 
    for line in madList: 
    line=line.split('A ') 
    dnsreg= line[1] 
    myFile.write(dnsreg) 
finally: 
    myFile.close() 

finally將始終工作,因此您的文件被關閉,並且寫入更改。

3

寫入文件的數據不會立即寫入,而是保存在緩衝區中,並且每次寫入大量數據以節省寫入磁盤開銷。但是,在關閉文件時,所有緩衝的數據都會刷新到磁盤。 final.write()

  1. 呼叫final.close()當你完成後,或
  2. 呼叫final.flush()如果你不想關閉文件:

    所以,你可以做兩件事情。

感謝@馬特的Tanenbaum,一個非常好的方式蟒蛇來處理,這是做了with塊內的文字:

with open("war.txt","w+") as final: 
    for line in madList: 
     line=line.split('A ') 
     dnsreg= line[1] 
     print dnsreg 
     final.write(dnsreg) 

這樣做,你永遠不用擔心收文件!但是,如果程序提前終止,您可能需要刷新(例如由於例外)。