当前位置: 首页 > news >正文

Python 自动化脚本系列:第3集

21. 使用 cryptography 自动化文件加密

Python 的 cryptography 库提供了一种安全的方式,使用对称加密算法对文件进行加密和解密。你可以自动化加密和解密文件的过程来保护敏感数据。

示例:文件加密和解密

假设你想使用对称加密算法加密一个文件,然后解密它。下面是使用 cryptography 库自动化此任务的方法:


from cryptography.fernet import Fernet  # 要加密的文件  
file_to_encrypt = 'sensitive_data.txt'  # 生成密钥  
key = Fernet.generate_key()  # 使用密钥创建 Fernet 密码器  
cipher = Fernet(key)  # 读取文件内容  
with open(file_to_encrypt, 'rb') as file:  data = file.read()  # 加密数据  
encrypted_data = cipher.encrypt(data)  # 将加密数据写入新文件  
with open('encrypted_file.txt', 'wb') as file:  file.write(encrypted_data)  print("文件加密成功。")  # 解密文件  
with open('encrypted_file.txt', 'rb') as file:  encrypted_data = file.read()  decrypted_data = cipher.decrypt(encrypted_data)  # 将解密后的数据写入新文件  
with open('decrypted_file.txt', 'wb') as file:  file.write(decrypted_data)  print("文件解密成功。")

这段代码首先使用 Fernet.generate_key() 生成一个随机的加密密钥。然后,它使用生成的密钥创建了一个 Fernet 密码器。使用 open() 以二进制模式(‘rb’)读取要加密的文件内容。然后,使用 Fernet 密码器的 encrypt() 方法对数据进行加密。加密后的数据使用 open() 以二进制写入模式(‘wb’)写入了一个名为 ‘encrypted_file.txt’ 的新文件。要解密文件,它从 ‘encrypted_file.txt’ 中读取加密数据,然后使用 Fernet 密码器的 decrypt() 方法对其进行解密。解密后的数据然后写入名为 ‘decrypted_file.txt’ 的新文件。最后,它打印出成功加密和解密文件的消息。

22. 使用 gzip 自动化文件压缩

Python 的 gzip 模块允许你使用 gzip 压缩算法对文件进行压缩和解压缩。你可以自动化压缩文件的过程以节省存储空间并减少文件传输时间。

示例:压缩和解压文件

假设你想使用 gzip 压缩一个文件,然后解压它。下面是使用 Python 自动化此任务的方法:


import gzip  # 要压缩的文件  
file_to_compress = 'example.txt'  # 压缩文件  
with open(file_to_compress, 'rb') as file_in:  with gzip.open(file_to_compress + '.gz', 'wb') as file_out:  file_out.writelines(file_in)  print("文件压缩成功。")  # 解压文件  
with gzip.open(file_to_compress + '.gz', 'rb') as file_in:  with open('decompressed_file.txt', 'wb') as file_out:  file_out.writelines(file_in)  print("文件解压成功。")

这段代码使用 open() 以二进制模式(‘rb’)读取要压缩的文件内容。然后,它使用 gzip.open() 以二进制写入模式(‘wb’)创建了一个具有相同文件名和 ‘.gz’ 扩展名的新的 gzip 文件。原始文件的内容使用 writelines() 写入到 gzip 文件中。要解压文件,它使用 gzip.open() 以二进制读取模式(‘rb’)打开 gzip 文件。然后,它将解压缩的内容写入名为 ‘decompressed_file.txt’ 的新文件中。最后,它打印出成功压缩和解压文件的消息。

23. 使用 Pillow 自动化图片缩放

Python 的 Pillow 库

提供了一种简单的方式来操作图像,包括调整它们的大小。你可以自动化将多个图像调整为特定大小的过程。

示例:调整多个图像的大小

假设你有一个包含图像的目录,你想将所有图像调整为特定大小。下面是使用 Pillow 自动化此任务的方法:


from PIL import Image  
import os  # 包含图像的目录  
image_directory = 'path/to/image/directory'  # 调整后的图像大小  
new_size = (800, 600)  # 迭代目录中的图像  
for filename in os.listdir(image_directory):  if filename.endswith('.jpg') or filename.endswith('.png'):  # 打开图像  image_path = os.path.join(image_directory, filename)  image = Image.open(image_path)  # 调整图像大小  resized_image = image.resize(new_size)  # 保存调整后的图像  resized_image.save(os.path.join(image_directory, 'resized_' + filename))  print("图像调整大小成功。")

这段代码迭代指定图像目录中的文件。它检查每个文件是否具有 ‘.jpg’ 或 ‘.png’ 扩展名以识别图像文件。对于每个图像文件,它使用 Pillow 库的 Image.open() 打开图像。然后,使用 resize() 方法将图像调整为所需大小。调整大小后的图像使用 save() 方法保存到相同目录中,并以 ‘resized_’ 作为前缀的新文件名。最后,它打印出成功调整图像大小的消息。

24. 使用 Python 自动化文件删除

Python 的 os 模块提供了文件和目录操作的函数,包括删除文件的函数。你可以根据特定条件自动化删除文件的过程。

示例:删除超过指定年龄的文件

假设你想删除一个目录中超过指定年龄的文件(例如,30 天)。下面是使用 Python 自动化此任务的方法:


import os  
import time  # 包含文件的目录  
directory = 'path/to/directory'  # 时间阈值(秒为单位)(例如,30 天)  
age_threshold = 30 * 24 * 60 * 60  # 获取当前时间戳  
current_time = time.time()  # 迭代目录中的文件  
for filename in os.listdir(directory):  file_path = os.path.join(directory, filename)  # 检查文件是否超过时间阈值  if os.path.isfile(file_path) and current_time - os.path.getmtime(file_path) > age_threshold:  # 删除文件  os.remove(file_path)  print(f"已删除:{filename}")  print("文件删除完成。")

这段代码定义了包含文件的目录和时间阈值(以秒为单位,例如 30 天)。它使用 time.time() 获取当前时间戳。然后,它迭代指定目录中的文件。对于每个文件,它使用 os.path.isfile() 检查是否为文件(而不是目录),并检查其修改时间(os.path.getmtime())是否超过时间阈值。如果文件满足条件,则使用 os.remove() 删除文件,并打印一条指示文件已被删除的消息。最后,它打印一条指示文件删除过程已完成的消息。

25. 使用 shutil 自动化文件复制

Python 的 shutil 模块提供了用于文件和目录管理的高级操作,包括复制文件的函数。你可以自动化将文件从一个目录复制到另一个目录的过程。

示例:从一个目录复制文件到另一个目录

假设你想将文件从一个目录复制到另一个目录。下面是使用 shutil 模块自动化此任务的方法:


import os  
import shutil  # 包含要复制文件的源目录  
source_directory = 'path/to/source/directory'  # 将文件复制到的目标目录  
destination_directory = 'path/to/destination/directory'  # 迭代源目录中的文件  
for filename in os.listdir(source_directory):  source_path = os.path.join(source_directory, filename)  destination_path = os.path.join(destination_directory, filename)  # 从源复制文件到目标  shutil.copy2(source_path, destination_path)  print(f"已复制:{filename}")  print("文件复制完成。")

这段代码定义了包含要复制文件的源目录和将文件复制到的目标目录。它迭代源目录中的文件。对于每个文件,它使用 os.path.join() 构造源路径和目标路径。使用 shutil.copy2() 函数将文件从源路径复制到目标路径。它保留文件元数据,如时间戳和权限。打印一条指示每个文件已复制的消息,最后打印一条指示文件复制过程已完成的消息。

26. 使用 tarfile 自动化文件打包

Python 的 tarfile 模块允许你创建和提取 tar 存档。你可以自动化将文件打包到 tar 存档中以及从 tar 存档中提取文件的过程。

示例:创建和提取 tar 存档

假设你想创建一个包含多个文件的 tar 存档,并稍后从存档中提取文件。下面是使用 tarfile 模块自动化此任务的方法:


import tarfile  # 要包含在存档中的文件  
files_to_archive = ['file1.txt', 'file2.txt', 'file3.txt']  # 存档的名称  
archive_name = 'example.tar'  # 创建 tar 存档  
with tarfile.open(archive_name, 'w') as tar:  for file in files_to_archive:  tar.add(file)  print("tar 存档创建成功。")  # 从 tar 存档中提取文件  
with tarfile.open(archive_name, 'r') as tar:tar.extractall()  print("文件提取成功。")

这段代码定义了要包含在 tar 存档中的文件列表和存档的名称。它使用 tarfile.open() 以写入模式(‘w’)打开 tar 存档。然后,它迭代要存档的文件,并使用 add() 方法将每个文件添加到存档中。要从 tar 存档中提取文件,它使用 tarfile.open() 以读取模式(‘r’)打开存档,并使用 extractall() 方法提取所有文件。最后,它打印出成功创建 tar 存档和从存档中提取文件的消息。

27. 使用 Selenium 自动化网页截图捕获

Selenium 是一个强大的自动化 web 浏览器的工具。你可以使用 Selenium 来编程方式捕获网页的截图。

示例:捕获网页的截图

假设你想捕获一个特定网页的截图。下面是使用 Selenium 自动化此任务的方法:


from selenium import webdriver  # 要捕获截图的网页的 URL  
url = 'https://www.example.com'  # 创建 Chrome 驱动程序的新实例  
driver = webdriver.Chrome()  # 导航到网页  
driver.get(url)  # 捕获截图  
driver.save_screenshot('screenshot.png')  # 关闭浏览器  
driver.quit()  print("截图捕获成功。")

这段代码使用 Selenium 自动化了捕获网页截图的过程。它使用 webdriver.Chrome() 创建了 Chrome 驱动程序的新实例。然后,它使用 get() 方法导航到指定的 URL。save_screenshot() 方法用于捕获当前网页的截图,并将其保存为 ‘screenshot.png’。最后,它使用 quit() 方法关闭浏览器,并打印出成功捕获截图的消息。

28. 使用 hashlib 自动化文件哈希计算

Python 的 hashlib 模块提供了生成文件的加密哈希的函数。你可以自动化计算文件的哈希以确保其完整性。

示例:计算文件的 SHA-256 哈希

假设你想计算文件的 SHA-256 哈希。下面是使用 hashlib 模块自动化此任务的方法:


import hashlib  # 要计算哈希的文件  
file_path = 'path/to/file'  # 创建 SHA-256 哈希对象  
sha256_hash = hashlib.sha256()  # 打开文件并读取其内容  
with open(file_path, 'rb') as file:  for chunk in iter(lambda: file.read(4096), b''):  sha256_hash.update(chunk)  # 获取哈希的十六进制表示  
hash_hex = sha256_hash.hexdigest()  print(f"文件的 SHA-256 哈希:{hash_hex}")

这段代码定义了要计算哈希的文件的路径。它使用 hashlib.sha256() 创建了一个 SHA-256 哈希对象。然后,它使用 open() 以二进制读取模式(‘rb’)打开文件。使用 iter()read() 以 4096 字节的块读取文件。每个块都传递给哈希对象的 update() 方法来更新哈希计算。最后,它使用 hexdigest() 方法获取计算的哈希的十六进制表示,并打印出来。

29. 使用 filecmp 自动化文件比较

Python 的 filecmp 模块提供了用于比较文件和目录的函数。你可以自动化比较文件以检查它们是否相同或不同的过程。

示例:比较两个文件

假设你想比较两个文件以检查它们是否相同。下面是使用 filecmp 模块自动化此任务的方法:


import filecmp  # 要比较的文件  
file1 = 'path/to/file1'  
file2 = 'path/to/file2'  # 比较文件  
if filecmp.cmp(file1, file2):  print("文件相同。")  
else:  print("文件不同。")

这段代码定义了要比较的两个文件的路径。它使用 filecmp.cmp() 函数比较两个文件的内容。如果文件相同,则打印一条消息指示文件相同。否则,打印一条消息指示文件不同。

30. 使用 os 自动化修改文件权限

Python 的 os 模块提供了修改文件权限的函数。你可以使用 os.chmod() 函数自动化修改文件权限的过程。

示例:更改文件权限

假设你想将文件的权限更改为使其对所有者可读、可写和可执行。下面是使用 os 模块自动化此任务的方法:


import os  # 要修改权限的文件  
file_path = 'path/to/file'  # 设置文件权限  
os.chmod(file_path, 0o755)  print("文件权限修改成功。")

这段代码定义了要修改权限的文件的路径。它使用 os.chmod() 函数更改文件权限。0o755 参数表示所需权限的八进制表示。在这种情况下,它使文件对所有者可读、可写和可执行,并对其他用户可读和可执行。最后,它打印一条消息指示文件权限已成功修改。

总结

今天主要介绍了 Python对文件的一些操作,包括压缩文件、加密文件、文件之间的比较等。

相关文章:

Python 自动化脚本系列:第3集

21. 使用 cryptography 自动化文件加密 Python 的 cryptography 库提供了一种安全的方式,使用对称加密算法对文件进行加密和解密。你可以自动化加密和解密文件的过程来保护敏感数据。 示例:文件加密和解密 假设你想使用对称加密算法加密一个文件&…...

Matlab-粒子群优化算法实现

文章目录 一、粒子群优化算法二、相关概念和流程图三、例题实现结果 一、粒子群优化算法 粒子群优化算法起源于鸟类觅食的经验,也就是一群鸟在一个大空间内随机寻找食物,目标是找到食物最多的地方。以下是几个条件: (1) 所有的鸟都会共享自己的位置以及…...

python 新特性

文章目录 formatted字符串字面值formatted字符串支持 字符串新方法变量类型标注二进制表示中数字为1的数量统计字典的三个方法新增mapping属性函数zip()新增strict参数dataclass字典合并match 语法 formatted字符串字面值 formatted字符串是带有’f’字符前缀的字符串&#xf…...

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照,另一种是AOF日志。RDB快照是一次全量备份,AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据,在存储上比较紧凑;AOF日志记录的是对内存数据修改的指令文本记录…...

Oracle闪回数据库【Oracle闪回技术】(二)

理解Oracle闪回级别【Oracle闪回技术】(一)-CSDN博客 Oracle默认是不开启闪回数据库的。如果开启闪回数据库的前提条件是,开启Oracle归档模式并启用闪回恢复区。 因为闪回日志文件存放在闪回恢复区中,如果在RAC环境下,必须将闪回恢复区存储在集群文件或者ASM文件中。 一…...

简单负载均衡

题目描述 某工程师为了解决服务器负载过高的问题,决定使用多个服务器来分担请求消息。 现给定 k 台服务器(编号从 1 到 k),以及一批请求消息的信息,格式为到达时刻 负载大小,消息说明: 每个时刻…...

Portforge:一款功能强大的轻量级端口混淆工具

关于Portforge Portforge是一款功能强大的轻量级端口混淆工具,该工具使用Crystal语言开发,可以帮助广大研究人员防止网络映射,这样一来,他人就无法查看到你设备正在运行(或没有运行)的服务和程序了。简而言…...

1.8. 离散时间鞅-无界停时定理与随机游走

无界停时定理与随机游走 无界停时定理与随机游走1. 无界停时定理1.1. 一致可积1.2. 非一致可积2. 应用于随机游动-鞅方法2.1. 随机游走构造的鞅2.2. 对称简单随机游走无界停时定理与随机游走 1. 无界停时定理 本节给出一致可积下鞅的无界停时定理,说明一致可积下鞅的停止过程…...

Google Pixel4手机刷机+Root+逆向环境详细教程

Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…...

IT项目管理-小题计算【太原理工大学】

1.合同总价问题 问承包商的利润是? 实际利润目标利润(目标成本-实际成本)*卖方分担比例 解:10 000(100 000 - 90 000)* 0.2 12 000(元) 实际成本有时也写作最终成本,问承…...

ARP欺骗使局域网内设备断网

一、实验准备 kali系统:可使用虚拟机软件模拟 kali虚拟机镜像链接:https://www.kali.org/get-kali/#kali-virtual-machines 注意虚拟机网络适配器采用桥接模式 局域网内存在指定断网的设备 二、实验步骤 打开kali系统命令行:ctrlaltt可快…...

Android动画(四):PathMeasure实现路径动画

文章概览 1 PathMeasure概述2 实现路径加载动画3 实现箭头加载动画4 实现操作成功动画 本系列将介绍以下内容: Android动画 1 PathMeasure概述 PathMeasure是一个单独的类,其全部源码如下(请详细研读注释): package…...

HTTP 连接详解

概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP(Transmission Control Protocol&…...

练习题(2024/5/12)

1二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4…...

Day50代码随想录动态规划part12:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

Day50 动态规划part12 股票问题 309.最佳买卖股票时机含冷冻期 leetcode题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 题意:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算…...

【软考】scrum的步骤

目录 1. 明确产品愿景和需求2. 制定计划和任务列表3. 进行迭代开发(Sprint)4. Sprint评审会议5. Sprint回顾会议6. 重复迭代 1. 明确产品愿景和需求 1.这个过程通常由项目所有者和利益相关者参与,目的是确保整个团队对项目的目标和方向有清晰…...

【C语言】编译与链接

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:C语言 个人主页:Celias blog~ 目录 引言 一、翻译环境 1.1 编译 1.1.1 预处理 1.1.2 编译 …...

Consul 注册的服务地址变成了 127.0.1.1

问题 我们的服务一直用 Consul 作为注册中心,在 AWS 和 阿里云上使用的时候,没出现过问题。最近把一些服务迁到腾讯云的时候,遇到一个问题:注册的服务地址都是 127.0.1.1。 127.0.1.1 这个地址我们平时遇到的比较少,…...

数字水印 | 离散小波变换 DWT 的 Python 代码实现

🍍原文: 【图像处理】图像离散小波变换及 Python 代码实现 🍍写在前面: 本文在原文的基础上补全了代码。 1 环境准备 ① 安装 p y w t \mathsf{pywt} pywt 包: pip install PyWavelets说明: p y w t \…...

[框架] Unity 公共执行器

本篇我们通过使用单例模式来创建一个公共执行器,使得原本应该在Update()、FixedUpdate()中的指令都可以统一放在一个对象中执行,且可进行添加和移除操作。 1. 创建单例模式改造器:SingletonMono 我们先创建一个单例模式改造器,使…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...