如何正确将循环结果批量写入文件而不丢失数据
#技术教程 发布时间: 2026-01-14
python中用`'w'`模式反复打开文件会导致前次写入内容被清空,应改用`with open(..., 'w')`一次性打开文件写入,或使用`'a'`追加模式配合预清理。
在Pyth
on中,文件打开模式决定了数据如何写入磁盘。你遇到的问题根源在于:每次循环中使用 'w'(write)模式调用 open('stars.txt', 'w'),都会截断(即清空)已有文件内容并重新开始写入。因此,尽管控制台能完整打印所有 star,但文件中最终只保留了最后一次循环写入的那一条记录。
✅ 正确做法是:将文件打开操作移出循环,在整个写入过程开始前一次性打开,结束后统一关闭。推荐使用 with 语句,它不仅语法简洁,还能确保即使发生异常,文件也会被安全关闭:
with open('stars.txt', 'w', encoding='utf-8') as sourceFile:
for star in Constellation_data(starDf.values.tolist()):
print(star) # 输出到控制台
print(star, file=sourceFile) # 同步写入文件
# 文件在此自动关闭,无需手动调用 .close()⚠️ 注意事项:
- 显式指定 encoding='utf-8' 可避免中文或特殊字符写入时报错(尤其在Windows系统上);
- print(..., file=f) 默认会在每行末尾添加换行符 \n,行为与 f.write(str(star) + '\n') 一致;
- 若需更精细控制(如不换行、自定义分隔符),可改用 sourceFile.write() 配合手动格式化。
? 替代方案(仅在特殊场景下使用):
若因外部进程需实时读取文件、或需保证每次写入后立即落盘(如日志监控),可采用 'a'(append)模式——但必须先清除旧文件,否则会持续累积:
import os
if os.path.exists('stars.txt'):
os.remove('stars.txt')
for star in Constellation_data(starDf.values.tolist()):
print(star)
with open('stars.txt', 'a', encoding='utf-8') as sourceFile:
print(star, file=sourceFile)? 总结:文件 I/O 应遵循“一次打开、批量写入、自动关闭”原则。滥用 'w' 模式循环打开是初学者常见误区;而 with 语句+合理文件模式('w' 或 'a')是兼顾健壮性、可读性与性能的最佳实践。
技术教程SEO上一篇 : 如何在 PHP 中动态包含并执行含用户定义变量的文件
下一篇 : ElevenLabs AI Music Generator:创作你的专属音乐世界
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!