Python读取names.txt批量创建同名目录及子文件15.txt的实现问题
需求说明
文件 names.txt 中存储了姓名列表,文件内每行对应一个姓名。
示例文件内容
- Lisa
- Luke
- Marry
实现目标
- 遍历姓名列表中的每个姓名,若对应名称的目录不存在则完成创建
- 在每个姓名对应目录中,创建名为
15.txt的文件
待修正原代码
with open("names.txt") as f: for line in f: readnewline = f.read() name = [] for name in readnewline: name = name.strip() if '.' not in name[-1]: directory = os.path.join(*([folder_path] + names)) if not os.path.exists(directory): print('mk directory: {}'.format(directory)) os.makedirs(directory) else: new_file = os.path.join(*([folder_path] + names)) if not os.path.exists(new_file): with open(new_file, 'w'): print('write file: {}'.format(new_file))
原代码问题说明
原代码存在多处错误,无法正常实现需求:
- 缺少依赖导入:使用了
os模块相关方法,但未提前导入os - 文件读取逻辑冲突:同时使用
for line in f逐行迭代和f.read()全量读取,会导致内容漏读、读取错位 - 变量使用混乱:存在同名变量循环覆盖问题,还引用了从未定义的
folder_path、names变量 - 业务逻辑错误:通过判断名称末尾是否包含
.区分目录和文件,完全不符合需求逻辑 - 路径拼接错误:路径拼接规则和目标需求不匹配,无法生成正确的目录、文件路径
- 文件创建无效:打开文件的上下文块内无有效操作,无法正常生成目标文件
修正后可运行代码
import os # 可自行修改为目标根目录路径,默认使用脚本运行的当前目录 folder_path = "./" with open("names.txt", "r", encoding="utf-8") as f: for line in f: name = line.strip() # 跳过文件中的空行,避免创建无效目录 if not name: continue # 拼接当前姓名对应的目录路径 user_dir = os.path.join(folder_path, name) # 目录不存在则创建 if not os.path.exists(user_dir): os.makedirs(user_dir) print(f'创建目录: {user_dir}') # 拼接目录下15.txt的完整路径 target_file = os.path.join(user_dir, "15.txt") # 文件不存在则创建 if not os.path.exists(target_file): # 不需要写入内容的话,块内写pass即可生成空文件 with open(target_file, "w", encoding="utf-8") as fw: pass print(f'创建文件: {target_file}')
使用说明
- 如果需要把所有姓名目录存到指定位置,直接修改
folder_path的值即可 - 代码统一使用
os.path.join拼接路径,可兼容Windows、macOS、Linux不同操作系统的路径规则 - 增加了空行跳过逻辑,避免因文件末尾空行、行间空行生成无效目录
内容的提问来源于stack exchange,提问作者MunkD.R
相关产品推荐
相关产品推荐

