功能:找出目录下的所有文件,用该文件和应一个表格的内容做相似度对比。且把相似度达到要求的新建一个表格,记录相似度及相似度达到要求的则打印对比的目录下的文件名称,没有达到要求的则记录相似度即可。
- 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("第二步骤:对比完成")
"""
最后查看结果表的
"""
对比目录文件
对比表格
对比的结果就是在对比表格后加一列记录差异及相似度