如何使用Python查找目录中的.txt文件并写入内容(支持批量写入)
Python: 向指定目录下所有
.txt文件写入内容的正确实现 没问题,这个需求完全可以用Python轻松实现!先看看你现有代码里的几个小问题,再给你完整的解决方案:
你的代码存在的问题
- 你把
open(file, "r+")放在了循环外面,这意味着循环结束后只会处理最后一个遍历到的.txt文件,前面的文件都没被写入 - 使用
"r+"模式虽然能读写,但如果只是要覆盖或追加内容,这个模式不是最优选择;而且没有用with语句管理文件,容易导致文件句柄泄露 - 没有拼接完整的文件路径,直接用
file变量打开的话,会在当前工作目录找文件,而不是目标目录下的文件
完整实现方案
下面是几种常见场景的代码,你可以根据需求选择:
1. 覆盖目标目录下所有.txt文件的内容
import os # 替换成你的目标目录路径 target_directory = "/Users/coder/Desktop/Sample Folder" # 要写入的文本内容 text_content = "This file is a .txt file" # 遍历目录下的所有文件 for filename in os.listdir(target_directory): # 筛选出.txt文件 if filename.endswith(".txt"): # 拼接完整的文件路径,避免跨平台路径问题 full_file_path = os.path.join(target_directory, filename) # 使用with语句自动管理文件,无需手动关闭 with open(full_file_path, "w", encoding="utf-8") as file: file.write(text_content) print(f"已成功写入: {full_file_path}")
2. 向目标目录下所有.txt文件追加内容(保留原有内容)
如果不想覆盖原有内容,只需要把打开模式从"w"改成"a"即可:
import os target_directory = "/Users/coder/Desktop/Sample Folder" text_content = "\nThis line is added to the .txt file" # 加换行符避免和原有内容连在一起 for filename in os.listdir(target_directory): if filename.endswith(".txt"): full_file_path = os.path.join(target_directory, filename) with open(full_file_path, "a", encoding="utf-8") as file: file.write(text_content) print(f"已成功追加内容到: {full_file_path}")
3. 处理目录及所有子目录中的.txt文件
如果需要递归处理子目录里的txt文件,可以用os.walk:
import os target_directory = "/Users/coder/Desktop/Sample Folder" text_content = "This file is a .txt file" # 递归遍历所有子目录 for root, _, files in os.walk(target_directory): for filename in files: if filename.endswith(".txt"): full_file_path = os.path.join(root, filename) with open(full_file_path, "w", encoding="utf-8") as file: file.write(text_content) print(f"已成功写入: {full_file_path}")
关键知识点说明
os.path.join():自动处理不同操作系统的路径分隔符(Windows用\,macOS/Linux用/),避免手动拼接路径出错with语句:Python处理文件的最佳实践,代码块结束后会自动关闭文件,即使写入过程中出现异常也能保证文件安全关闭- 文件打开模式:
"w":写入模式,会清空文件原有内容后写入新内容"a":追加模式,将新内容添加到文件末尾,保留原有内容- 指定
encoding="utf-8":确保文本在不同系统下不会出现乱码问题
内容的提问来源于stack exchange,提问作者Code
相关产品推荐
相关产品推荐

