2015-02-10 70 views
0

我編寫了一些python代碼來從web上拉出表格並將其保存到文件中。在交互模式下,我可以測試我的代碼並將數據保存到文件中。但是,當我用命令行運行該文件時,它沒有給出andy錯誤消息,但該文件是空的。無法使用Python寫入文件

這是我的代碼的一部分。我在windows下運行2.7.90

rows=soup.tbody.findAll('tr') 
outf=open('.\data\dec','w') 
for tr in rows: 
    cols=tr.findAll('td') 
    out='*'.join([c.text.encode('utf-8') for c in cols]) 
    outf.write(out+'\n') 

    outf.close 
    browser.close() 
+3

'outf.close'應該是'outf.close()'。 – iCodez 2015-02-10 22:13:18

+0

行也可能爲空... – 2015-02-10 22:14:10

+0

謝謝。 outf.close應該是outf.close(),但這不會影響結果。我發現我需要在代碼中放置一個暫停(seelp)並等待結果。這就是爲什麼當我使用交互模式時,我可以正確地獲取文件(逐個複製命令,以便有足夠的時間返回結果)。如果在命令行中運行而沒有睡眠,結果表尚未準備好。多謝你們! – user3547439 2015-02-11 15:56:41

回答

1

我覺得您的問題來自於你:OUTF內,您的for循環

  1. 收盤;
  2. 誤用.close()(您只有.close);和
  3. 關閉browser在您的for循環內。

您的代碼發佈將只處理一行,然後關閉您的文件和瀏覽器!

你可能會發現你的代碼將工作,如果重寫,像這樣:

rows=soup.tbody.findAll('tr') 

with open('.\data\dec','w') as file_handle: 
    for row in rows: 
     cols = tr.findAll('td') 
     file_handle.write('*'.join([c.text.encode('utf-8') for c in cols])+'\n') 
browser.close() 

注:使用with自動地關閉你爲你的文件;)

1

不確定關於縮進,看起來很奇怪。請嘗試

outf.close() 

您想調用該方法,而不是引用內存中的方法。

0

我會使用類似以下內容:

rows = soup.tbody.findAll('tr') 
with open('.\data\dec', 'w') as file: 
    for tr in rows: 
    cols = tr.findAll('td') 
    out = '*'.join([c.text.encode('utf-8') for c in cols]) 
    file.write('%s\n' % out) 

browser.close()