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

Python双目录文件比对删除已匹配文件避免重复比对问题求解

可行解决方案

你当前的报错根源是迭代的是程序启动时生成的静态github文件列表,物理文件删除后列表中的对应条目仍保留,后续迭代到这些条目时就会访问不存在的文件。你可以通过维护动态待匹配列表从根源避免该问题,无需额外try except处理。

修正后的实现代码

from difflib import SequenceMatcher
import os

# 初始化时将github文件列表转为可变的动态待匹配列表
remaining_github_files = sorted_github_files.copy()

for i in sorted_files:
    # 外层仅读取一次当前文件的内容,避免重复IO
    try:
        with open(f'./files/{i}') as f1:
            text1 = f1.read()
    except:
        # 第一个目录的文件读取失败直接跳过该文件
        continue
    
    # 内层迭代当前剩余的待匹配github文件
    for j in remaining_github_files:
        with open(f'./github_files/{j}') as f2:
            text2 = f2.read()
        
        m = SequenceMatcher(None, text1, text2)
        print("file1:", i, "file2:", j)
        if m.ratio() > 0.90:
            os.remove(f'./github_files/{j}')
            # 同步从待匹配列表中删除该文件名,后续不再迭代
            remaining_github_files.remove(j)
            break

关键修改说明

  • 新增remaining_github_files动态列表作为github文件的待匹配池,内层循环仅遍历该列表
  • 匹配成功删除物理文件的同时,将对应文件名从remaining_github_files中移除,从根源避免后续访问已删除文件的问题
  • 将第一个目录的文件读取逻辑移到外层循环,每个i对应的文件仅读取一次,大幅降低IO开销
  • 仅保留第一个目录文件读取的异常处理(避免源文件损坏或无权限导致程序崩溃),github目录的文件读取完全不需要额外异常处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:06:02