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’字符前缀的字符串…...

十一、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 我们先创建一个单例模式改造器,使…...

二进制转为HEX数组小工具
在使用RA8889时,JPG的解码只能从FLASH的DMA通道获取,那么如果要从远端、或者SD卡等处读取JPG图片出来显示怎么办? RA8889支持JPG图片硬解码,但数据流是从FLASH进行DMA读取的,然后再进行解码。因此这种情况下ÿ…...

数据结构-二叉树-红黑树
一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…...

C++11 新特性 decltype 说明符
一、typeof与typeid 1.1、typeof 在C11标准之前,GCC已经提供了一个类似功能的运算符 typeof对类型进行推导,但是这毕竟是编译器的实现,不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符,获取的类型…...

java线程局部变量使用方式
线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在,并且每个线程都有自己的一份拷贝。换句话说,线程局部变量是线程私有的,其他线程无法访问。 使用场景主要包括: 1. 存储线程状态信息ÿ…...
【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙
【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…...

2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享
大家好,从昨天肝到现在,终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解!_哔哩哔哩_bilibili 2024数维杯…...

中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2022年12月 编程题五道 总分:100分一、鸡兔同笼(20分) 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日
每天一分钟,知晓天下事! 2024年5月12日 星期日 农历四月初五 1、 全国多地已推“一次挂号管三天”,部分医院专家门诊适用。 2、 在梅大高速塌方事故中拦车、救援,黄曼秋等5人拟确认为见义勇为。 3、 深圳新能源车指标申请条件调…...

微服务思想以及实现
文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求(RestTemplate)3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…...

C语法:格式符号%f和%lf引发的错误
今天编程时有如下代码: #include"stdio.h"int main(void) {double profit;double bonus;printf("请输入本月利润\n");scanf("%f",&profit);//错误:此行profit是double类型,格式符为%f,当输入8时࿰…...