如何用Python向文件夹内所有文件追加文本?报PermissionError如何解决
代码存在的问题
- 核心错误:你在循环中直接把文件夹路径传给了
open()函数尝试写入。os.listdir(dir)仅返回目标目录下的文件/子文件夹的名称,没有和父目录拼接得到完整的文件路径,直接写入文件夹是系统不允许的操作,因此触发权限报错。 - 隐藏问题1:没有判断遍历到的对象是文件还是子文件夹,如果
folder1下存在子目录,就算拼接路径后依然会触发同类错误。 - 隐藏问题2:循环内打开的文件没有及时关闭,仅在循环结束后关闭了最后一次打开的文件句柄,可能造成资源泄漏,也容易出现写入内容丢失的问题。
- 命名不规范:使用了Python内置函数名
dir作为变量名,会覆盖原内置函数的功能,属于不规范写法。
修复方案
修改后的可运行代码如下:
import os # 不要用内置函数名dir做变量名,替换为target_dir target_dir = r'C:\Users\User1\Desktop\folder1' append_content = "My desired text\n" for file_name in os.listdir(target_dir): # 拼接得到完整的文件路径 full_path = os.path.join(target_dir, file_name) # 只处理文件,跳过子文件夹 if os.path.isfile(full_path): # 用with上下文管理器自动关闭文件,不需要手动写close with open(full_path, 'a', encoding='utf-8') as f: f.write(append_content)
代码修改说明
- 替换变量名
dir为target_dir,避免覆盖内置函数 - 新增路径拼接逻辑,得到每个文件的完整访问路径
- 增加文件类型判断,跳过目录下的子文件夹
- 使用
with上下文管理器管理文件句柄,自动完成资源释放,避免手动关闭遗漏的问题 - 新增
encoding参数指定编码,避免写入中文时出现乱码问题(如果仅写入英文可省略)
内容的提问来源于stack exchange,提问作者arvygasp
相关产品推荐
相关产品推荐

