实例:图片处理

目录

图片处理

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} 格式化表达式,它表示将前面的数值按照浮点数形式展示,并且保留两位小数(同样可按需调整小数位数),最后拼接上 % 符号组成完整的百分比形式的字符串进行输出展示。

运行结果

结束语

希望以上关于如何将相似度结果更规范地显示为百分比形式的内容对你有所帮助呀。在处理文件相似度这类问题时,不仅要关注结果的展示效果,也要留意比较方法是否适用于具体的文件类型,像之前提到对于图像文件按文本内容比较可能不太准确的情况,后续你可以进一步探索更贴合实际需求的文件比较策略哦。编程就是这样一个不断探索和优化的过程,期待你在更多实践中收获满满,解决各种有趣又有挑战性的问题呢。要是还有其他疑问,随时都可以再来交流探讨哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙项目云捐助第四讲鸿蒙App应用的登陆注册页实现

根据app的操作流程可以知道,当启动页启动后,点击启动页中的页面就进入到了登录页。本讲就是针对于登录注册页的实现,实现的界面参考下图。 这里根据这个素材的参考实现鸿蒙Next云捐助的登录页。 一、鸿蒙Next云捐助登录页的实现 在项目中继…

大屏开源项目go-view二次开发1----环境搭建(C#)

最近公司要求做一个大屏的程序用于展示公司的产品,我以前也没有相关的经验,最糟糕的是公司没有UI设计的人员,领导就一句话要展示公司的产品,具体展示的内容细节也不知道,全凭借自己发挥。刚开始做时是用wpf做的&#x…

WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路

2024年11月30日下午,由 deepin(深度)社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG(武汉Linux用户组)线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…

操作系统的基本认识

操作系统的感性认识 操作系统这个词可能或多或少听说过,比如windows, linux, macOS。这些其实都是工程师们经过实践后的具象化产物。而操作系统原理这六个字就是操作系统的抽象化,更准确的说,操作系统原理是很理论化的东西。举一个不是很恰当…

强化学习Q-learning及其在机器人路径规划系统中的应用研究,matlab代码

一、Q-learning 算法概述 Q-learning 是一种无模型的强化学习算法,它允许智能体(agent)在没有环境模型的情况下通过与环境的交互来学习最优策略。Q-learning的核心是学习一个动作价值函数(Q-function),该函…

微信小程序横屏页面跳转后,自定义navbar样式跑了?

文章目录 问题原因:解决方案: 今天刚遇到的问题,横屏的页面完成操作后跳转页面后,自定义的tabbar样式乱了,跑到最顶了,真机调试后发现navbar跑到手机状态栏了,它正常应该跟右边胶囊一行。 知道问…

分布式 Paxos算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…

10.qml使用 shadereffect 实现高斯模糊

目录 高斯模糊sigma获取加权均值获取 高斯二维公式实现高斯一维公式实现使用总结 高斯模糊 高斯模糊应用领域我就不过多讲解,想了解自己去了解 高斯模糊有 一维公式 二维公式 当然我们图像是二维的 但是实际上二维公式用于计算那是消耗大量的算力的&#xff0c…

从 CephFS 到 JuiceFS:同程旅游亿级文件存储平台构建之路

随着公司业务的快速发展,同程旅行的非结构化的数据突破 10 亿,在 2022 年,同程首先完成了对象存储服务的建设。当时,分布式文件系统方面,同程使用的是 CephFS,随着数据量的持续增长,CephFS 的高…

相机测距原理

基础概念的回顾 焦距的定义 焦距是指透镜或镜头的光学中心(通常是透镜的几何中心)到其焦点的距离。 焦点是光线的交点,它指的是透镜或镜头聚焦所有入射光线后汇聚的位置。焦点的位置与透镜的曲率和光线的入射角度相关。就是说所有光线经过…

AOF和RDB【Redis持久化篇】

文章目录 1.什么是持久化?2.RDB3.AOF 1.什么是持久化? Redis是跑在内存里的,当程序重启或者服务器崩溃,数据就会丢失,如果业务场景希望重启之后数据还在,就需要持久化,即把数据保存到可永久保存…

2024-12-14 学习人工智能的Day35 卷积神经网络.阶段项目

卷积神经网络项目实现 关于项目实现的文档说明书,三个要素:数据、模型、训练 1、项目简介。 1.1 项目名称 ​ 基于CNN实现扑克牌花色的小颗粒度分类 1.2 项目简介 ​ 该项目旨在通过卷积神经网络(CNN)实现扑克的小颗粒度分类…

【鸿蒙实战开发】数据的下拉刷新与上拉加载

本章介绍 本章主要介绍 ArkUI 开发中最常用的场景下拉刷新, 上拉加载,在本章中介绍的内容在实际开发过程当中会高频的使用,所以同学们要牢记本章的内容。下面就让我们开始今天的讲解吧! List 组件 在 ArkUI 中List容器组件也可以实现数据滚动的效果&a…

MR30分布式 IO 模块:硅晶行业电池片导片机的智能 “心脏”

硅晶产业作为全球能源和电子领域的基石,其生产规模庞大且工艺复杂。从硅料的提纯、拉晶,到硅片的切割、电池片的制造,每一个环节都要求高精度与高稳定性。在电池片生产环节,导片机承担着硅片传输与定位的重要任务,其运…

MAC虚拟机上安装WDA环境

MAC虚拟机上安装WDA环境 一、MAC虚拟机切换root权限二、macOS上安装xcode若你的macOS系统可以在appstore下载安装若你安装的macOS系统版本太低,无法在appstore上安装xcode 三、macOS上安装WebDriverAgent四、使用xcode配置WDA安装到手机上高版本系统支持 一、MAC虚拟…

个人ffmpeg笔记(一)

环境安装 QT环境安装 运行qt…run安装 下载地址:https://download.qt.io/archive/qt/ 下载地址:https://download.qt.io/archive/qt/5.12/5.12.10/ sudo apt install --reinstall libxcb-xinerama0 解决xcb问题 Ubuntu16.04打开Qt显示/home/user/.co…

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页:醋溜马桶圈-CSDN博客 专栏:计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…

WordPress插件 Download-block-plugin下载按钮图标美化

WordPress插件 Download-block-plugin下载按钮图标美化

分布式 漏桶算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 漏桶算法 & 总结》《分布式 & 漏桶算法 & 问题》 概述 简介 LBA Leaky Bucket Algorithm 漏桶算法是一种流行于网络通信领域的流量控制/频率限制算法。漏桶算法的核心原理是通过一个概念上的“漏桶”来…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …