2015-02-10 68 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()