Python "使用 with open(file) as f" 在循环中中断时不保存内容
我通常使用 with open('file.txt', 'w') as f:
来写文件(也可以用来读文件)。今天我发现了一些奇怪的事情。
我在爬一个网站,网站有正常的分页。
While True:
# visit url, get/scrape data
# save data in text file
# find next link(pagination)
# loop till next url is available.
为了保存数据,我最开始是用 with
的方式。
with open('data.txt','w') as f:
While True:
# visit url, get/scrape data
f.write(some_scraped_data)
# find next link(pagination)
# loop till next url is available.
但是当我运行这个脚本时,如果发生了某个错误,这个循环就会被终止,结果数据没有保存到 data.txt 文件里。
而当我用 f = open('data.txt','w')
的时候,不管发生什么错误,爬取到的数据都会被保存(直到发生错误),即使我没有调用 f.close()。
f = open('data.txt','w')
While True:
# visit url, get/scrape data
f.write(some_scraped_data)
# find next link(pagination) til next url is available.
我的问题是,如何才能用 with
达到同样的效果?我很好奇,大家都推荐用 with
来处理文件,但它似乎不支持这个功能。
附注:我在 Python 方面经验不多,所以如果你觉得这个问题很傻,我很抱歉。
1 个回答
3
根据文档,使用'with'语句可以确保即使发生错误,文件也会被正确关闭,所以这是一个很好的做法。
不过,你也可以试试 f.flush()
,这个命令可以把缓冲区里的内容写入到磁盘上。关于flush的更多信息,可以查看这里:Python的file.flush()到底在做什么?