目录
图片处理
Python代码展示
代码逐行注释
图片素材
运行结果
需要注意的几点:
运行思路
1. 导入必要的模块及类(开头部分)
2. 定义文件相似度检查函数(file_similarity_checker 函数部分)
3. 指定要比较的文件路径及调用函数(变量定义及函数调用部分)
代码优化
一、使用格式化字符串(原代码基础上稍作修改)
二、通过计算转换并拼接字符串
运行结果
结束语
图片处理
检测文本文件的相似性
Python代码展示
from difflib import SequenceMatcher
def file_similarity_checker(f1,f2):
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
f1_data = file1.read()
f2_data = file2.read()
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
print(f"These files are {checking} % similar")
file_1 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\e2.jpg"
file_2 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\watermarked_2.jpg"
file_similarity_checker(file_1, file_2)
代码逐行注释
from difflib import SequenceMatcher
# 从Python标准库中的difflib模块导入SequenceMatcher类。
# SequenceMatcher类用于比较两个序列(在这里是文件内容的字符串形式)之间的相似性,
# 它可以帮助计算出两个序列的相似度比例等相关信息。
def file_similarity_checker(f1, f2):
# 定义一个名为file_similarity_checker的函数,用于检查两个文件内容的相似度。
# 该函数接收两个参数f1和f2,分别代表要进行相似度比较的两个文件的路径。
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
# 使用with语句打开两个文件,这样可以确保文件在使用完毕后自动关闭,避免资源泄露等问题。
# open函数用于打开文件,第一个参数是文件路径(在这里分别是传入函数的f1和f2参数),
# errors="ignore"表示在读取文件过程中如果遇到编码等错误,忽略这些错误继续读取(不过这样可能会丢失部分有错误的数据)。
# 分别将打开的两个文件对象赋值给file1和file2变量,后续通过这两个变量来读取文件内容。
f1_data = file1.read()
# 调用file1文件对象的read方法,读取文件1的全部内容,并将其赋值给f1_data变量,此时f1_data就是一个包含文件1内容的字符串。
f2_data = file2.read()
# 同样地,调用file2文件对象的read方法,读取文件2的全部内容,将其赋值给f2_data变量,f2_data为包含文件2内容的字符串。
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
# 创建一个SequenceMatcher对象,第一个参数传入None表示使用默认的比较方法,
# 后面跟着传入要比较的两个字符串序列,即前面读取到的文件1内容f1_data和文件2内容f2_data。
# 然后调用该对象的ratio方法,计算出两个文件内容字符串之间的相似度比例,将结果赋值给checking变量。
# 这个相似度比例的取值范围是0到1,0表示完全不相似,1表示完全相同。
print(f"These files are {checking} % similar")
# 使用格式化字符串打印输出一条提示信息,展示两个文件的相似度情况,将相似度比例值以百分比的形式呈现出来,
# 让用户直观地了解两个文件内容有多相似。
file_1 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\e2.jpg"
file_2 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\watermarked_2.jpg"file_1 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\e2.jpg"
file_2 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\watermarked_2.jpg"
# 定义两个变量file_1和file_2,分别赋值为两个要进行相似度比较的文件的实际路径,这里的路径需要根据实际文件所在位置准确填写。
file_similarity_checker(file_1, file_2)
# 调用前面定义的file_similarity_checker函数,传入两个文件的路径变量file_1和file_2作为参数,
# 触发函数执行,按照函数内部定义的逻辑来比较这两个文件内容的相似度,并输出相应的结果。
图片素材
运行结果
需要注意的几点:
-
代码中使用
errors="ignore"
来忽略读取文件时的错误,这可能导致部分数据丢失或者不准确,在实际应用中如果对文件内容完整性要求较高,建议先确保文件编码正确等前提条件,尽量避免忽略错误的读取方式。 -
对于比较大的文件,一次性读取全部文件内容到内存(像代码中
read
方法的用法)可能会占用大量内存,导致内存不足等问题,这种情况下可以考虑分块读取文件内容的方式来优化内存使用情况,不过代码的复杂度会相应增加。
运行思路
1. 导入必要的模块及类(开头部分)
from difflib import SequenceMatcher
从 Python 标准库中的 difflib
模块导入 SequenceMatcher
类。SequenceMatcher
类提供了比较两个序列相似性的功能,在这里将用于对比两个文件内容(以字符串形式呈现的序列)之间的相似度,能计算出相应的相似度比例数值。
2. 定义文件相似度检查函数(file_similarity_checker
函数部分)
def file_similarity_checker(f1, f2):
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
f1_data = file1.read()
f2_data = file2.read()
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
print(f"These files are {checking} % similar")
-
打开文件:
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
使用with
语句同时打开两个文件,open
函数的第一个参数分别传入要比较的两个文件的路径(即f1
和f2
参数),errors="ignore"
表示在读取文件内容时,如果遇到编码等错误,直接忽略错误继续读取(不过这种方式可能会丢失存在错误部分的数据)。并且通过as
关键字分别将打开的两个文件对象命名为file1
和file2
,好处是在with
语句块结束后,文件会自动关闭,无需手动关闭文件,避免因忘记关闭文件而导致的资源泄露等问题。 -
读取文件内容:
f1_data = file1.read()
和f2_data = file2.read()
分别调用file1
和file2
这两个文件对象的read
方法,将两个文件的全部内容读取出来,并分别赋值给变量f1_data
和f2_data
。此时,f1_data
和f2_data
就分别代表了两个文件内容的字符串形式,为后续比较它们的相似性做好准备。 -
计算相似度并输出结果:
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
首先创建一个SequenceMatcher
对象,传入的第一个参数None
表示使用默认的比较方法,后面跟着传入刚才读取到的两个文件内容字符串f1_data
和f2_data
,以此构建出用于比较两个文件内容相似性的对象。接着调用该对象的ratio
方法,它会计算出这两个文件内容字符串之间的相似度比例,得到的结果是一个范围在0
到1
之间的数值(0
表示两个文件内容完全不相似,1
表示完全相同),并将这个相似度比例数值赋值给变量checking
。print(f"These files are {checking} % similar")
使用格式化字符串的方式,将计算得到的相似度比例数值以百分比的形式打印输出,这样用户就能直观地看到两个文件内容的相似程度了。
3. 指定要比较的文件路径及调用函数(变量定义及函数调用部分)
file_1 = "F:\\study\\Python\\PyCharm Community Edition\\study(学习)\\Code Script(代码脚本)(10)\\e2.jpg"
file_2 = "F:\\study\\Python\\PyCharm Community Edition\\study(学习)\\Code Script(代码脚本)(10)\\watermarked_2.jpg"
file_similarity_checker(file_1, file_2)
-
定义文件路径变量:
首先定义了两个变量file_1
和file_2
,分别赋值为两个要进行相似度比较的文件的实际路径(这里的路径需要根据实际文件所在的真实位置准确填写,且假设路径中的反斜杠已经按照 Python 字符串的要求进行了转义,如\\
的写法)。需要注意的是,虽然代码中文件名后缀是.jpg
,看起来像是图像文件,但代码实际上是将文件内容当作普通文本(字符串)来处理并比较相似性的,对于二进制的图像文件这种比较方式可能并不准确(更适合文本文件之间的比较)。 -
调用相似度检查函数:
最后调用之前定义好的file_similarity_checker
函数,将file_1
和file_2
这两个变量作为参数传入函数。函数接收到参数后,就会按照其内部定义好的逻辑,先打开这两个文件,读取内容,计算相似度,再输出相似度的百分比结果,完成对这两个指定文件内容相似度的检查操作。
代码优化
在原有基础上把数值改为百分比。
一、使用格式化字符串(原代码基础上稍作修改)
在原代码中使用格式化字符串来打印相似度结果时,可以通过指定格式化的方式,让小数更规范地显示为百分比形式。示例代码如下:
from difflib import SequenceMatcher
def file_similarity_checker(f1, f2):
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
f1_data = file1.read()
f2_data = file2.read()
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
# 使用格式化字符串,通过 {:.2%} 的格式将相似度比例值显示为百分比形式,保留两位小数
print(f"These files are {checking:.2%} similar")
file_1 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\e2.jpg"
file_2 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\watermarked_2.jpg"
file_similarity_checker(file_1, file_2)
在上述代码中,{:.2%}
这个格式化表达式的含义是:
-
:
表示格式化操作开始。 -
.2
表示要保留两位小数(你可以根据需要调整保留的小数位数)。 -
%
表示将前面的数值按照百分比的形式进行展示,也就是会乘以100
并添加%
符号。
二、通过计算转换并拼接字符串
先将相似度比例值乘以 100
转换为百分比对应的数值,然后再拼接上 %
符号来形成最终的百分比字符串进行展示。示例代码如下:
from difflib import SequenceMatcher
def file_similarity_checker(f1, f2):
with open(f1, errors="ignore") as file1, open(f2, errors="ignore") as file2:
f1_data = file1.read()
f2_data = file2.read()
checking = SequenceMatcher(None, f1_data, f2_data).ratio()
percentage = checking * 100
# 将计算得到的百分比数值转换为字符串,并拼接上 % 符号后进行打印展示
print(f"These files are {percentage:.2f}% similar")
file_1 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\e2.jpg"
file_2 = r"F:\study\Python\PyCharm Community Edition\study(学习)\Code Script(代码脚本)(10)\watermarked_2.jpg"
file_similarity_checker(file_1, file_2)
在这段代码里:
-
首先通过
percentage = checking * 100
把相似度比例值(范围是0
到1
)乘以100
,得到对应的百分比数值。 -
然后在打印时使用
{:.2f}
格式化表达式,它表示将前面的数值按照浮点数形式展示,并且保留两位小数(同样可按需调整小数位数),最后拼接上%
符号组成完整的百分比形式的字符串进行输出展示。
运行结果
结束语
希望以上关于如何将相似度结果更规范地显示为百分比形式的内容对你有所帮助呀。在处理文件相似度这类问题时,不仅要关注结果的展示效果,也要留意比较方法是否适用于具体的文件类型,像之前提到对于图像文件按文本内容比较可能不太准确的情况,后续你可以进一步探索更贴合实际需求的文件比较策略哦。编程就是这样一个不断探索和优化的过程,期待你在更多实践中收获满满,解决各种有趣又有挑战性的问题呢。要是还有其他疑问,随时都可以再来交流探讨哦。