# 找出文件名相似的文件

为了写稿子，以往收集过很多资料。

经常会出现一个情况，查找文件的时候，发现相同的内容可能存了好几份。

可能的原因是我喜欢批量收集，不同渠道可能回反复发布同一个内容。

其实存点文档网页啥的也不占啥空间，就是本地一搜索，出来好几个结果令人恼火。

所以用ChatGPT-4写了个python代码，经过几次调试，结果令人满意。

如果文件比较多，可能会运行时间比较长，请耐心等待。

运行的结果会以txt和csv文件形式和py脚本放在同一个目录下。

```python
import os
import difflib
import csv

# 你想要开始查找的目录
start_dir = '/目录请填写在这里'
print(f'Starting directory: {start_dir}')  # 打印开始目录

# 将所有文件名及其路径存入列表
file_list = []
for dirpath, dirnames, filenames in os.walk(start_dir):
    for filename in filenames:
        file_list.append(os.path.join(dirpath, filename))
print(f'Found {len(file_list)} files')  # 打印找到的文件数

# 准备存储相似文件对的列表
similar_files = []

for i in range(len(file_list)):
    for j in range(i+1, len(file_list)):
        # 使用 difflib 库的 SequenceMatcher 函数来比较两个文件名的相似度
        seq = difflib.SequenceMatcher(a=os.path.basename(file_list[i]), b=os.path.basename(file_list[j]))
        # 如果相似度大于0.8（这个值可以根据需要调整），则将这两个文件名添加到结果列表
        if seq.ratio() > 0.8:
            similar_files.append([file_list[i], file_list[j]])

print(f'Found {len(similar_files)} pairs of similar files')  # 打印找到的相似文件对数

# 获取脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))

# 将结果写入文本文件
with open(os.path.join(script_dir, 'similar_files.txt'), 'w') as f:
    for pair in similar_files:
        f.write(f'Found similar files: {pair[0]} and {pair[1]}\n')

# 将结果写入 CSV 文件
with open(os.path.join(script_dir, 'similar_files.csv'), 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['File 1', 'File 2'])  # 写入表头
    writer.writerows(similar_files)  # 写入数据
```
