如何基于模糊匹配(匹配度≥80)为TXT文件生成分类列并构建DataFrame
实现相似TXT文件名分类并生成带分类列的DataFrame
下面是完整的实现代码,基于你已有的基础逻辑补充了分类逻辑和DataFrame构建:
import os import pandas as pd from fuzzywuzzy import fuzz from fuzzywuzzy import process # 1. 获取指定路径下的所有txt文件 path = '../../../files' text_files = [f for f in os.listdir(path) if f.endswith('.txt')] # 2. 实现相似文件名分类逻辑 file_categories = {} current_category = 1 category_map = {} for file in text_files: # 检查当前文件是否能匹配到已有的分类 match = process.extractOne(file, list(category_map.keys()), scorer=fuzz.ratio) if match and match[1] >= 80: # 匹配成功,归入对应分类 category_map[file] = category_map[match[0]] else: # 无匹配项,新建分类 category_map[file] = f"分类{current_category}" current_category += 1 # 3. 构建包含分类列的DataFrame df = pd.DataFrame({ "文件名": list(category_map.keys()), "分类": list(category_map.values()) }) print(df)
代码说明
- 文件获取:沿用你原有的逻辑筛选出所有
.txt后缀文件 - 分类逻辑:
- 用
process.extractOne在已有的分类代表文件中查找匹配度最高的项 - 当匹配度≥80时,将当前文件归入对应分类;否则创建新分类
- 分类命名采用"分类+序号"的形式,你也可以改成用第一个匹配到的文件名作为分类名(比如把
f"分类{current_category}"换成file)
- 用
- DataFrame构建:将文件名和对应的分类映射转换成DataFrame,方便后续分析或导出
示例结果
假设你的文件列表是:["programmi.txt", "programmi-2.txt", "report_2024.txt", "report_final.txt", "notes.txt"],运行后得到的DataFrame会是:
| 文件名 | 分类 |
|---|---|
| programmi.txt | 分类1 |
| programmi-2.txt | 分类1 |
| report_2024.txt | 分类2 |
| report_final.txt | 分类2 |
| notes.txt | 分类3 |
注意事项
- 若要提升模糊匹配的速度,建议安装
python-Levenshtein库:pip install python-Levenshtein - 匹配阈值(80)可根据实际需求调整,数值越高分类越严格
- 如果文件名中有重复项,会自动归入同一分类
内容的提问来源于stack exchange,提问作者Elif Y
相关产品推荐
相关产品推荐

