python 对比表格内容相似度

功能:找出目录下的所有文件,用该文件和应一个表格的内容做相似度对比。且把相似度达到要求的新建一个表格,记录相似度及相似度达到要求的则打印对比的目录下的文件名称,没有达到要求的则记录相似度即可。

  • 1、安装库 pip install fuzzywuzzy 因为conda不自带该库。
  • 2、准备一个需要扫描的目录:directory = ‘/path/to/your/directory’,扫描完成生成对应的文件路径:D:/文档/file_info.xlsx,该文件记录路径及文件名称。文件名称则是需要对比的参数。
  • 3、准备需要对比相似度的文档,确定需要对比的列,用来和生成的文件file_info.xlsx的文件名称做对比。
  • 4、 逻辑如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 21 17:11:52 2024
@author: chenyao
"""
import pandas as pd
from fuzzywuzzy import fuzz
import os
"""
pip install fuzzywuzzy  conda 不自带该库
第一步执行前提:由于服务器安装库、配置相关信息、安装比较麻烦,可以直接把服务器要核查的目录文件拷贝一下
放到本地任意位置 directory = '/path/to/your/directory'  可以在30行此处修改程序代码放置的路径
"""
print("第一步骤:file_info路径文件开始生成")
"""第一步骤:开始进行对比代码目录文件目录及文件名称的获取"""
# 定义一个函数来获取目录中所有文件的路径和名称
def get_file_info(directory):
    file_info = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            file_info.append({
                'File Path': file_path,
                'column_to_compare': file
            })
    return file_info
 
# 指定目录,该目录可以改成需要扫描的应用程序下的目录。
directory = '/path/to/your/directory'
# 获取文件信息
file_info_list = get_file_info(directory)
# 将文件信息写入Excel文件
df = pd.DataFrame(file_info_list)
#得到文件路径及文件名称
df.to_excel('D:/文档/file_info.xlsx', index=False) 
print("第一步骤:file_info路径文件生成 成功")
"""
第二部执行前提:获取到了核查文件 file_info.xlsx
获得需要对比的全量文件之后,把该文件和安全组发的漏洞文件进行对比 可以把文件放到指定目录
file1 = pd.read_excel('D:/file2_互联网高危漏洞列表.xlsx')     ---> 对比的程序文件可替换
file2 = pd.read_excel('D:/file_info.xlsx') ---> 对比的安全文件file_info.xlsx
可以设置相似度similarity_ratio >= 53  可以修改此处的53相似度,可变参数,相似度对比可以设置得更低一些。
"""

"""第二步骤:开始进行内容相似度对比""" 
print("第二步骤:开始进行内容相似度对比")
# 读取Excel文件 file1 的 B 列,对每个元素与 file2 的 B 
#file1 = pd.read_excel('D:/对比/file2_互联网高危漏洞列表.xlsx')
#file1 = pd.read_excel('D:/对比/file2_互联网高危漏洞列表.xlsx')  
file1 = pd.read_excel('D:/对比/file2_内网高危漏洞列表.xlsx')  
file2 = pd.read_excel('D:/file_info.xlsx')
#result = pd.read_excel('result.xlsx')

# 初始化匹配结果列表
matches = []
similarities = []

# 定义匹配函数
def match_function(row):
    max_similarity = 0
    best_match = '不涉及'
   
    for item2 in file2['column_to_compare']:
        similarity_ratio = fuzz.ratio(str(row), str(item2))  # 转换为字符串进行比较
        if similarity_ratio > max_similarity:
            max_similarity = similarity_ratio
            best_match = item2 if similarity_ratio >= 55 else '不涉及'   #设置参数位置
    matches.append(best_match)
    similarities.append(max_similarity)
    return best_match,max_similarity

# 使用apply函数遍历file1的B列
file1['Matched_Field'], file1['Similarity'] = zip(*file1['column_to_compare'].apply(match_function))

# 将结果写入新的Excel文件
file1.to_excel('D:/企业评级/EAST及存款保险-文档/result_with_match_column_east.xlsx', index=False)   #结果表可名称自定义
print("第二步骤:对比完成")
"""
最后查看结果表的
"""

对比目录文件
在这里插入图片描述

对比表格
在这里插入图片描述
对比的结果就是在对比表格后加一列记录差异及相似度

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44814698

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值