为什么这段代码只写入文件中的最后一条记录?

时间:2016-01-15 19:10:09

标签: python

所以这是代码,它在循环中但仅存储最后一条记录:

try:
    with open('records.csv', 'a') as csv_file:
        for url in urls:
            if url.strip() != '':
                print('Processing URL:- '+url)
                data = fetch_data(url)
                csv_file.write(data)
                status = 'OK'
        csv_file.close()
except Exception,e:
    status = 'FAIL'
    print str(e)
finally:
    with open('process.log', 'a') as the_file:
        ts = time.strftime("%H:%M")
        the_file.write(ts+'\t'+url+'\t'+status+'\n')
if driver is not None:
    driver.quit()

records.csv仅保存最后一条记录

1 个答案:

答案 0 :(得分:1)

file.write不会在文件中添加换行符,因此它可能会处理所有内容,但只会向文件中添加一行。

一些挑剔:

  • 由于您使用csvfile.close()阻止,因此无需执行with
  • 您不需要在循环的每次迭代中设置status="OK",只需在循环上方设置一次。
  • 将数据与I / O分开处理可能会更快,正如@bruno在下面建议的那样。

datalines = []
for url in urls:
    if url.strip():
        datalines.append(fetch_data(url))
csvfile.write("\n".join(datalines))