Python文件追加异常:循环未修改目标文件,生成新文件并清空原内容
问题排查与修复方案
嘿,我来帮你揪出代码里的问题——你遇到的这两个现象其实都是文件路径处理错误导致的,咱们一步步拆解:
为啥文件跑到桌面去了?
os.listdir(directory) 只会返回目标目录里的纯文件名(比如test.ADC),不是完整路径。当你直接用 open(filename, 'a') 时,Python会在当前脚本的工作目录(大概率是桌面,因为你可能直接在桌面运行这个脚本)创建或打开文件,完全没碰你指定目录里的那些.ADC文件!
原文件为啥被“清空”?
其实你的原文件根本没被修改!你看到的那个只有Vcomb内容的文件,是Python在桌面新建的同名文件,而目标目录里的原文件其实完好无损(除非你之前测试时不小心用了'w'模式覆盖,但当前代码用的是'a',不会清空文件)。
修复后的代码
核心就是把目录路径和文件名拼接成完整文件路径,同时我还加了几个实用优化:
import os print("Enter Date & Time: (YYYYMMDDhhmm)") vdate = input().strip() vline = f"VERIFY 48:0x{vdate}" print("Please Use: Verified by:___(Full name)____ on ___(Date)___") vname = input().strip() vcomments = f" // {vname}" Vcomb = vline + vcomments print(Vcomb) print("Copy paste full directory path here") directory = input().strip() for filename in os.listdir(directory): if filename.endswith(".ADC"): # 拼接完整文件路径,这是关键! full_file_path = os.path.join(directory, filename) # 用with语句自动管理文件,不用手动close,更安全 with open(full_file_path, 'a') as f: # 加个换行符,避免新内容和原文件最后一行粘在一起 f.write(Vcomb + '\n')
额外小提示
- 加了
.strip()处理所有输入,避免用户不小心输入的前后空格搞砸路径或内容 - 写入时加了
'\n',保证每次追加的内容是独立一行,格式更整洁 with语句是Python操作文件的最佳实践,就算脚本中途出错,也能确保文件被正确关闭,不会损坏文件
内容的提问来源于stack exchange,提问作者Simplymcbook
相关产品推荐
相关产品推荐

