Python遍历项目目录外txt文件写入无报错不生效如何解决
故障原因
问题出在路径传参错误:
os.listdir(folderPath)的返回值只有目录下的文件名本身,不包含上层文件夹路径。- 直接把这个文件名传给
open()时,Python会默认从当前脚本的运行工作目录(也就是你的项目存放路径c:\Users\test\pycharmproject\pythonproject)下查找对应文件。 - 由于你用的是追加写入模式
"a",如果当前工作目录下找不到同名文件,Python不会抛出报错,反而会直接在工作目录下新建同名txt文件写入内容。最终的结果就是你要修改的c:\Users\test\test.txt根本没被操作,内容被写到了项目目录下新建的同名文件里,所以你观察到目标文件无变化、程序无报错。
你直接传入完整绝对路径调用open时能正常写入,就是因为给了明确的文件定位,不存在路径解析歧义。
修改方案
打开文件前,把传入的目标文件夹路径和遍历得到的文件名拼接为完整绝对路径即可,推荐用os.path.join()做拼接,自动适配Windows/macOS/Linux的路径分隔符规则,不会出现斜杠转义问题。
修正后的代码:
import os def foo(folderPath, fileEx, text): for file in os.listdir(folderPath): if file.endswith(fileEx): # 拼接得到文件的完整绝对路径 file_full_path = os.path.join(folderPath, file) # 用with上下文管理器自动处理文件关闭,避免资源泄漏 with open(file_full_path, "a", encoding="utf-8") as f: f.write(text) print(f"写入完成:{file_full_path}") foo("c:\\Users\\test", ".txt", "-----")
额外优化点:
- 用
with语句操作文件不需要手动调用close(),即使写入过程中出现异常也会自动释放文件资源,稳定性更高 - 显式指定
encoding="utf-8"可以避免不同操作系统默认编码差异导致的乱码问题
如果需要递归遍历目标文件夹下所有子目录内的指定后缀文件,把
os.listdir替换为os.walk即可实现。
内容的提问来源于stack exchange,提问作者jonny
相关产品推荐
相关产品推荐

