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

如何提取两个目录中的同名文件?代码执行异常求助

我来帮你排查下代码里的问题,你遇到的输出全是“not meet”,是因为好几处逻辑和用法错误导致的,咱们一步步修正:

问题拆解

  1. os.listdir不支持通配符匹配:你想用listdir筛选*Not_Null.txt文件,但os.listdir只能列出目录下所有文件,无法做通配符过滤,得用glob.glob来实现这个需求。
  2. 文件路径的转义陷阱:Python里字符串的反斜杠是转义符(比如\U会被识别为Unicode转义),所以路径要改成原始字符串(加r前缀)或者用双反斜杠,避免解析错误。
  3. 文件读取的逻辑错误:你只是打开了repo_dataset文件,但没有读取其中的内容;而且直接用生成器(str(l) for l in repo_dataset)和x比较,这永远不会相等——生成器是一个迭代器对象,不是具体的文件名字符串。另外,文件里的每行大概率带有换行符\n,需要先去掉才能正确匹配。
  4. 效率问题:如果把repo里的文件名存成集合,查找速度会从O(n)变成O(1),比每次循环遍历整个文件高效得多。

修正后的代码

import os
import glob

# 用原始字符串避免转义问题,用glob匹配指定后缀的文件
result = glob.glob(r"C:\Users\Dbs_finalFINAL\*Not_Null.txt")

# 读取repo文件里的所有文件名,存成集合(自动去重+快速查找)
with open(r"C:\Users\repositories_No_zero_datasets.txt", "r") as repo_file:
    # 去掉每行的换行符和空白,同时过滤空行
    repo_names = {line.strip() for line in repo_file if line.strip()}

# 遍历找到的Not_Null.txt文件,提取核心名称
for file_path in result:
    # 先从完整路径里提取文件名(比如"xxxNot_Null.txt")
    file_name = os.path.basename(file_path)
    # 去掉末尾的"Not_Null.txt"(长度为13)
    x = file_name[:-13]
    
    # 检查是否在repo的文件名集合里
    if x in repo_names:
        print(f"找到同名文件: {x}")
    # 如果不需要打印未匹配项,可以注释掉下面的代码
    # else:
    #     print(f"未匹配: {x}")

关键改进说明

  • 用glob.glob正确匹配带通配符的文件,返回的是完整路径,所以用os.path.basename提取纯文件名。
  • 用with语句打开文件,会自动关闭文件,比手动close()更安全规范。
  • 把repo里的文件名存成集合,既可以自动去重,又能实现极速查找。
  • 处理了路径转义和换行符问题,避免了隐形的匹配失败。

内容的提问来源于stack exchange,提问作者nina_dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:10