Python指定文件夹读写文件报PermissionError的解决方法
问题根因
你遇到的报错核心是3个代码逻辑错误:
- 你定义的
file_path是文件夹路径,操作系统不允许直接用文件读写接口打开目录,这是触发PermissionError: [Errno 13]的直接原因——不是真的没有访问权限,是你打开的目标类型完全错误。 - 代码里
csv.reader参数存在语法错误,delimiter参数多写了一层引号,传值不符合参数要求。 - 报错信息里的实际访问路径是
C:\Users\name\project,和你代码里写的main_folder不一致,说明运行时代码的路径配置和你贴出的片段有偏差,需要先确认路径配置正确。
另外你的需求是合并普通txt文件,不需要调用csv模块,直接用基础文件读写接口即可。
修复思路
- 先校验主文件夹路径是否存在,不存在则自动创建,提前规避路径不存在的问题
- 遍历主文件夹下所有后缀为
.txt的文件,过滤掉最终生成的合并文件,避免把输出文件自身读入造成内容循环 - 逐个读取每个txt的文本内容,按顺序追加写入到单个合并输出文件中
- 全程统一使用UTF-8编码,减少乱码问题
可直接运行的实现代码
from pathlib import Path # 配置路径:主文件夹、合并后输出的文件 main_folder = Path.home() / "main_folder" merged_output = main_folder / "all_merged.txt" # 自动创建主文件夹(如果不存在) main_folder.mkdir(exist_ok=True, parents=True) # 收集所有待合并的txt文件,过滤掉输出文件自身 txt_file_list = [f for f in main_folder.glob("*.txt") if f.is_file() and f != merged_output] # 执行合并 with open(merged_output, "w", encoding="UTF-8") as out_f: for file_idx, single_txt in enumerate(txt_file_list): # 可选:写入分隔标记,区分不同原文件的内容 out_f.write(f"\n----- 以下内容来自原文件:{single_txt.name} -----\n") # 读取单个txt内容写入,errors="ignore"可以跳过个别乱码字符避免程序中断 with open(single_txt, "r", encoding="UTF-8", errors="ignore") as in_f: out_f.write(in_f.read()) print(f"合并完成,共处理{len(txt_file_list)}个txt文件,结果路径:{merged_output.resolve()}")
补充说明
- 如果你的txt文件存放在主文件夹的子目录中,把代码里的
main_folder.glob("*.txt")替换为main_folder.rglob("*.txt")即可递归遍历所有子目录下的txt文件 - 如果运行时仍报权限错误,检查目标文件夹是否被其他程序占用,不要把主文件夹设置在C盘根目录、Program Files等系统受保护路径下,确认当前Windows账号对目标目录有读写权限
- 如果待合并的是带分隔符的csv格式文本,再逐文件调用csv模块读取即可,禁止直接对文件夹对象调用文件打开接口
内容的提问来源于stack exchange,提问作者Jhonny Doe
相关产品推荐
相关产品推荐

