You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于文件清单检测目录缺失文件及Python脚本修复求助

修复文件存在性检查脚本的误判问题

需要依据指定TXT文件中的预期文件清单,检查目标目录中对应的.npy文件是否存在,生成带存在标记的结果文件。现有脚本错误地将所有文件判定为缺失,以下是问题分析与修复方案:

原脚本核心问题

  1. 换行符不匹配:读取TXT文件时直接保留了每行末尾的换行符\n,但目录中提取的文件名无换行符,导致字符串匹配完全失败。
  2. 目录遍历逻辑冗余:用os.walk收集文件名时嵌套存入列表,再取lof[0]的方式不严谨,若目录存在子目录会引发错误。
  3. 冗余依赖:导入了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:50:34