基于文件清单检测目录缺失文件及Python脚本修复求助
修复文件存在性检查脚本的误判问题
需要依据指定TXT文件中的预期文件清单,检查目标目录中对应的.npy文件是否存在,生成带存在标记的结果文件。现有脚本错误地将所有文件判定为缺失,以下是问题分析与修复方案:
原脚本核心问题
- 换行符不匹配:读取TXT文件时直接保留了每行末尾的换行符
\n,但目录中提取的文件名无换行符,导致字符串匹配完全失败。 - 目录遍历逻辑冗余:用
os.walk收集文件名时嵌套存入列表,再取lof[0]的方式不严谨,若目录存在子目录会引发错误。 - 冗余依赖:导入了
copy、pandas、shutil等未使用的库,增加代码冗余。
修复后的完整代码
import os # 配置路径 path_to_file = 'xxxxxxxxxxxxxxxxxx/train_files_CS/all_training_CSmaster.txt' target_dir = 'xxxxxxxxxxx/train_files_CS' # 收集目录下所有符合条件的npy文件名(去掉.npy后缀) existing_npy_basenames = [] for _, _, filenames in os.walk(target_dir): for filename in filenames: # 筛选以P开头、.npy结尾的文件 if filename.startswith('P') and filename.endswith('.npy'): # 移除.npy后缀,确保格式统一 basename = filename[:-4] existing_npy_basenames.append(basename) # 读取预期文件清单,清理换行符与空白 expected_files = [] with open(path_to_file, 'r') as file: for line in file: clean_name = line.strip() if clean_name: # 跳过空行 expected_files.append(clean_name) # 生成检查结果文件 existing_count = 0 missing_count = 0 with open('check_training.txt', 'w') as result_file: for file_name in expected_files: if file_name in existing_npy_basenames: existing_count += 1 result_file.write(f"{file_name}...[exists]\n") else: missing_count += 1 result_file.write(f"{file_name} ...[doesn't exist]\n") # 输出统计结果 print(f"\n缺失文件数量: {missing_count}\n") print(f"存在文件数量: {existing_count}\n")
关键修复说明
- 统一字符串格式:用
line.strip()移除预期文件名的换行符与首尾空白,确保和目录中提取的文件名完全匹配。 - 优化目录遍历:直接遍历所有文件名并筛选符合条件的项,避免嵌套列表的潜在问题,同时兼容子目录中的文件(若需忽略子目录,可替换
os.walk为os.listdir并拼接路径判断)。 - 精简代码结构:移除未使用的库导入,用
with上下文管理器处理文件操作,确保资源自动释放。
内容的提问来源于stack exchange,提问作者Megan Darcy
相关产品推荐
相关产品推荐

