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
相关产品推荐
相关产品推荐

