2012-04-27 24 views
1

執行我有以下代碼:寫作Python中的文件上一次運行

f=open('data.txt', 'w') 
conn = urllib2.urlopen('http://example.com') 
page_html = conn.read() 
data=BeautifulSoup(page_html) 
count=0 
out="" 
for val in data.findAll('td'): 
    count=count+1 
    if(count%2==0 and val.contents): 
     out=out+val.contents[0].strip(' \n\t')+"\n" 
    if(count>=18): 
     f.write(out+"\n") 
     break 
f.closed 

現在,當我執行的代碼,以前運行的輸出變爲文件中的data.txt

例如,現在我在url中有example.com,我運行代碼,然後將url更改爲stackoverflow.com。現在,當我再次運行它並檢查data.txt時,我在data.txt文件中有example.com的輸出。下次我運行一個不同的url時,我在文件中獲取了stackoverflow.com的輸出。有人能幫我解決這個問題嗎?我在代碼的每個階段檢查了輸出。如果我直接給出輸出而不是寫入文件,它可以很好地工作。

+0

難道你不想'f.close()'而不是'f.closed'? – Tebbe 2012-04-27 15:16:23

+0

還應該指出的是,在Python中if語句周圍不使用括號。它應該是'如果計數> = 18:'和'如果計數%2 == 0和val.contents:' – 2012-04-27 15:32:02

+0

@burhan這會有所作爲嗎?它不會產生任何錯誤或警告。 – gopi1410 2012-04-27 15:35:06

回答

5

您可能要使用f.close()而不是f.closed。後者不關閉文件。它返回一個布爾值,告訴你文件是否被關閉。

我還建議您使用with statement而不是手動關閉文件。

with open('data.txt', 'w') as f: 
    # etc... 
+0

+1。 ['with'語句](http://docs.python.org/reference/compound_stmts.html#the-with-statement)是[打開文件]的最佳解決方案(http://docs.python.org/ whatsnew/2.5.html#PEP-343最有語句)。它不僅更加pythonic和可讀,但處理閉幕,即使發生異常。 – 2012-04-27 15:17:02

+0

f.close()與f.closed的區別是什麼?我以爲兩者都做同樣的事情。 – gopi1410 2012-04-27 15:18:34

+3

@ gopi1410''f.close()''是一個關閉文件的函數。 ''f.closed''是一個屬性,告訴你文件是否關閉。您應該更仔細地閱讀文檔 - 在Python中非常罕見有兩種方法可以完成一件事(這是一個沒有的特定設計目標)。 – 2012-04-27 15:20:15

1

您想關閉您的文件與

f.close() 

函數調用,從而刷新你的輸出緩衝器。