Python "使用 with open(file) as f" 在循环中中断时不保存内容

3 投票
1 回答
8246 浏览
提问于 2025-04-30 22:35

我通常使用 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()到底在做什么?

撰写回答