41. 使用 cryptography 库自动化文件加密
Python 的 cryptography 库提供了一种使用对称加密算法加密和解密文件的安全方式。你可以自动化加密和解密文件的过程,以保护敏感数据。
示例:使用 Fernet 加密和解密文件
假设你想使用 Fernet 对称加密算法加密一个文件,然后再解密它。以下是如何使用 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 密码器。它以二进制模式 (‘rb’) 使用 open()
读取要加密的文件的内容。然后使用 Fernet 密码器的 encrypt()
方法加密数据。加密的数据使用二进制写模式 (‘wb’) 的 open()
写入名为 ‘encrypted_file.txt’ 的新文件中。为了解密文件,它从 ‘encrypted_file.txt’ 读取加密数据,并使用 Fernet 密码器的 decrypt()
方法解密。解密的数据随后被写入名为 ‘decrypted_file.txt’ 的新文件中。最后,它打印出成功加密和解密文件的消息。
42. 使用 Pillow 自动化图片水印处理
Python 的 Pillow 库提供了图像处理功能,包括向图像添加水印。你可以自动化为多张图片添加特定文本或标志的水印的过程。
示例:向图片添加文本水印
假设你想为一批图片添加文本水印。以下是如何使用 Pillow 库自动化此任务的方法:
from PIL import Image, ImageDraw, ImageFont
import os
# 包含图片的目录
image_directory = 'path/to/image/directory'
# 水印文本和字体
watermark_text = 'Your Watermark'
font = ImageFont.truetype('arial.ttf', 36)
# 遍历目录中的图片
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)
# 创建绘图上下文
draw = ImageDraw.Draw(image)
# 计算水印位置
text_width, text_height = draw.textsize(watermark_text, font)
x = image.width - text_width - 10
y = image.height - text_height - 10
# 在图片上绘制水印
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, 128))
# 保存加水印后的图片
watermarked_filename = f"watermarked_{filename}"
watermarked_path = os.path.join(image_directory, watermarked_filename)
image.save(watermarked_path)
print(f"水印添加完成: {filename}")
这段代码片段遍历指定目录中的图片。它检查每个文件是否以 ‘.jpg’ 或 ‘.png’ 扩展名结尾,以识别图像文件。对于每个图像文件,它使用 Pillow 库的 Image.open()
打开图像。它使用 ImageDraw.Draw()
创建一个绘图上下文,以便在图像上绘图。它根据图像尺寸和文本大小计算水印文本的位置。水印定位在图像的右下角,略微偏移。使用绘图上下文的 text()
方法,它在图像上绘制指定字体、大小和颜色(带透明度的白色)的水印文本。使用 save()
方法,加水印后的图像以 ‘watermarked_’ 前缀的新文件名保存。最后,它打印出完成图像加水印过程的消息。
43. 使用 PyPDF2 自动化提取文件元数据
Python 的 PyPDF2 库允许你从 PDF 文件中提取元数据。你可以自动化从多个 PDF 文件中提取特定元数据字段的过程。
示例:从 PDF 文件中提取作者和标题
假设你有一个包含 PDF 文件的目录,你想从每个文件中提取作者和标题的元数据。以下是如何使用 PyPDF2 库自动化此任务的方法:
import os
from PyPDF2 import PdfFileReader
# 包含 PDF 文件的目录
pdf_directory = 'path/to/pdf/directory'
# 遍历目录中的 PDF 文件
for filename in os.listdir(pdf_directory):
if filename.endswith('.pdf'):
# 打开 PDF 文件
pdf_path = os.path.join(pdf_directory, filename)
with open(pdf_path, 'rb') as file:
# 创建 PDF 阅读器对象
pdf_reader = PdfFileReader(file)
# 提取元数据
metadata = pdf_reader.getDocumentInfo()
author = metadata.get('/Author', '未知')
title = metadata.get('/Title', '未知')
print(f"文件: {filename}")
print(f"作者: {author}")
print(f"标题: {title}")
print("---")
print("元数据提取完成。")
这段代码片段遍历指定目录中的 PDF 文件。它检查每个文件是否以 ‘.pdf’ 扩展名结尾,以识别 PDF 文件。对于每个 PDF 文件,它以二进制读模式 (‘rb’) 使用 open()
打开文件。它从 PyPDF2 库创建一个 PdfFileReader
对象来读取 PDF 文件。使用 PDF 阅读器对象的 getDocumentInfo()
方法,它检索 PDF 文件的元数据字典。它使用 get()
方法提取作者和标题元数据字段,如果字段不存在,提供默认值 ‘未知’。对于每个 PDF 文件,它会打印出作者和标题的提取元数据,以及文件名,用一行破折号分隔。最后,它打印出完成元数据提取过程的消息。
44. 利用 lzma 实现文件压缩和解压自动化
Python 的 lzma 模块支持使用 LZMA 压缩算法来压缩和解压文件。你可以自动化文件压缩过程,以节省存储空间并减少文件传输时间。
示例:使用 LZMA 压缩和解压文件
假如你想使用 LZMA 压缩一个文件,然后再解压它。以下是如何使用 Python 自动化此任务的方法:
import lzma
# 要压缩的文件
file_to_compress = 'example.txt'
# 压缩文件
with open(file_to_compress, 'rb') as file_in:
with lzma.open(file_to_compress + '.xz', 'wb') as file_out:
file_out.write(file_in.read())
print("文件成功压缩。")
# 解压文件
with lzma.open(file_to_compress + '.xz', 'rb') as file_in:
with open('decompressed_file.txt', 'wb') as file_out:
file_out.write(file_in.read())
print("文件成功解压。")
这段代码片段使用二进制模式 (‘rb’) 读取要压缩的文件内容,然后使用 lzma.open()
以二进制写模式 (‘wb’) 创建一个新的 LZMA 文件,文件名与原文件相同,扩展名为 ‘.xz’。原文件的内容通过 write()
写入 LZMA 文件。为了解压文件,它使用 lzma.open()
以二进制读模式 (‘rb’) 打开 LZMA 文件,然后将解压后的内容写入名为 ‘decompressed_file.txt’ 的新文件。最后,它打印出成功压缩和解压文件的消息。
45. 使用 PyCrypto 自动化文件加密
Python 的 PyCrypto 库提供了安全加密和解密文件的加密原语。你可以自动化使用对称加密算法加密和解密文件的过程。
示例:使用 AES 加密和解密文件
假如你想使用 AES 加密算法加密一个文件,然后再解密它。以下是如何使用 PyCrypto 自动化此任务的方法:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 要加密的文件
file_to_encrypt = 'sensitive_data.txt'
# 生成一个随机加密密钥
key = get_random_bytes(16)
# 创建一个 AES 密码对象
cipher = AES.new(key, AES.MODE_EAX)
# 读取文件内容
with open(file_to_encrypt, 'rb') as file:
plaintext = file.read()
# 加密数据
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
# 将加密数据写入新文件
with open('encrypted_file.bin', 'wb') as file:
[file.write(x) for x in (cipher.nonce, tag, ciphertext)]
print("文件成功加密。")
# 解密文件
with open('encrypted_file.bin', 'rb') as file:
nonce, tag, ciphertext = [file.read(x) for x in (16, 16, -1)]
cipher = AES.new(key, AES.MODE_EAX, nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
# 将解密数据写入新文件
with open('decrypted_file.txt', 'wb') as file:
file.write(plaintext)
print("文件成功解密。")
这段代码片段使用 get_random_bytes()
生成一个随机加密密钥。它使用密钥和 EAX 模式创建一个 AES 密码对象。它读取要加密的文件内容,并使用密码对象的 encrypt_and_digest()
方法加密数据。加密数据连同 nonce 和 tag 一起写入名为 ‘encrypted_file.bin’ 的新文件。为了解密文件,它从加密文件中读取 nonce、tag 和密文。它使用相同的密钥和 nonce 创建一个新的 AES 密码对象。使用 decrypt_and_verify()
方法解密密文并使用 tag 验证完整性。然后将解密的数据写入名为 ‘decrypted_file.txt’ 的新文件。
46. 使用 Dropbox API 自动化文件同步
Python 提供了与各种云存储服务(如 Dropbox)交互的库。你可以使用 Dropbox API 自动化本地机器与 Dropbox 之间文件的同步过程。
示例:与 Dropbox 同步文件
假设你想同步本地机器与 Dropbox 之间的特定文件。以下是如何使用 Dropbox API 自动化此任务的方法:
import dropbox
import os
# Dropbox 访问令牌
ACCESS_TOKEN = 'your_access_token'
# 要同步的本地目录
local_directory = '/path/to/local/directory'
# 要同步的 Dropbox 目录
dropbox_directory = '/path/to/dropbox/directory'
# 创建 Dropbox 客户端
dbx = dropbox.Dropbox(ACCESS_TOKEN)
# 从本地同步文件到 Dropbox
for root, dirs, files in os.walk(local_directory):
for filename in files:
local_path = os.path.join(root, filename)
relative_path = os.path.relpath(local_path, local_directory)
dropbox_path = os.path.join(dropbox_directory, relative_path)
with open(local_path, 'rb') as f:
dbx.files_upload(f.read(), dropbox_path, mode=dropbox.files.WriteMode.overwrite)
print(f"已上传: {local_path} -> {dropbox_path}")
# 从 Dropbox 同步文件到本地
for entry in dbx.files_list_folder(dropbox_directory).entries:
if isinstance(entry, dropbox.files.FileMetadata):
dropbox_path = entry.path_display
local_path = os.path.join(local_directory, os.path.relpath(dropbox_path, dropbox_directory))
if not os.path.exists(os.path.dirname(local_path)):
os.makedirs(os.path.dirname(local_path))
_, response = dbx.files_download(dropbox_path)
with open(local_path, 'wb') as f:
f.write(response.content)
print(f"已下载: {dropbox_path} -> {local_path}")
print("文件同步完成。")
这段代码片段假设你已经获取了 Dropbox API 的访问令牌。你需要将 'your_access_token'
替换为你实际的访问令牌。它定义了要同步的本地目录和 Dropbox 目录。然后,它使用 dropbox.Dropbox()
构造函数创建一个 Dropbox 客户端,传递访问令牌。为了从本地目录同步文件到 Dropbox,它使用 os.walk()
遍历本地目录。对于每个文件,它构造本地路径和相应的 Dropbox 路径。它读取文件内容并使用 files_upload()
方法上传到 Dropbox,覆盖任何现有文件。为了从 Dropbox 同步文件到本地目录,它使用 files_list_folder()
检索 Dropbox 目录中的文件列表。对于每个文件条目,它构造 Dropbox 路径和相应的本地路径。如果不存在必要的目录,它使用 os.makedirs()
创建目录。然后,它使用 files_download()
下载文件内容并将其写入本地文件。最后,它打印出完成文件同步过程的消息。
47. 使用 py7zr 自动化文件压缩和归档
Python 的 py7zr 库允许你创建和提取 7z 归档文件。你可以自动化将文件压缩并归档到 7z 归档中的过程,以及从 7z 归档中提取文件的过程。
示例:创建和提取 7z 归档
假设你想创建一个包含多个文件的 7z 归档,然后从归档中提取这些文件。以下是如何使用 py7zr 库自动化此任务的方法:
import py7zr
# 要归档的文件
files_to_archive = ['file1.txt', 'file2.txt', 'file3.txt']
# 7z 归档的名称
archive_name = 'example.7z'
# 创建 7z 归档
with py7zr.SevenZipFile(archive_name, 'w') as archive:
for file in files_to_archive:
archive.write(file)
print("7z 归档成功创建。")
# 从 7z 归档中提取文件
with py7zr.SevenZipFile(archive_name, 'r') as archive:
archive.extractall()
print("文件成功提取。")
这段代码片段定义了要包含在 7z 归档中的文件列表和归档的名称。它使用 py7zr.SevenZipFile()
以写模式(‘w’)打开 7z 归档。然后,它遍历要归档的文件,并使用 write()
方法将每个文件添加到归档中。为了从 7z 归档中提取文件,它以读模式(‘r’)使用 py7zr.SevenZipFile()
打开归档。使用 extractall()
方法从归档中提取所有文件。最后,它打印出成功创建 7z 归档和从归档中提取文件的消息。
48. 使用 PyCryptodome 自动化文件加密
Python 的 PyCryptodome 库提供了安全加密和解密文件的加密原语。你可以自动化使用对称加密算法加密和解密文件的过程。
示例:使用 AES 加密和解密文件
假设你想使用 AES 加密算法加密一个文件,然后再解密它。以下是如何使用 PyCryptodome 自动化此任务的方法:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 要加密的文件
file_to_encrypt = 'sensitive_data.txt'
# 生成一个随机加密密钥
key = get_random_bytes(16)
# 创建一个 AES 密码对象
cipher = AES.new(key, AES.MODE_EAX)
# 读取文件内容
with open(file_to_encrypt, 'rb') as file:
plaintext = file.read()
# 加密数据
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
# 将加密数据写入新文件
with open('encrypted_file.bin', 'wb') as file:
[file.write(x) for x in (cipher.nonce, tag, ciphertext)]
print("文件成功加密。")
# 解密文件
with open('encrypted_file.bin', 'rb') as file:
nonce, tag, ciphertext = [file.read(x) for x in (16, 16, -1)]
cipher = AES.new(key, AES.MODE_EAX, nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
# 将解密数据写入新文件
with open('decrypted_file.txt', 'wb') as file:
file.write(plaintext)
print("文件成功解密。")
这段代码片段使用 get_random_bytes()
生成一个随机加密密钥。它使用密钥和 EAX 模式创建一个 AES 密码对象。它读取要加密的文件内容,并使用密码对象的 encrypt_and_digest()
方法加密数据。加密数据连同 nonce 和 tag 一起写入名为 ‘encrypted_file.bin’ 的新文件。为了解密文件,它从加密文件中读取 nonce、tag 和密文。它使用相同的密钥和 nonce 创建一个新的 AES 密码对象。使用 decrypt_and_verify()
方法解密密文并使用 tag 验证完整性。然后将解密的数据写入名为 ‘decrypted_file.txt’ 的新文件。
49. 情感分析
情感分析是确定文本中表达的情感或情绪的过程。你可以使用 Python 库如 NLTK 或 TextBlob 自动化情感分析。
示例:分析电影评论的情感
假设你有一组电影评论数据,你想分析每条评论的情感。以下是如何使用 TextBlob 自动化此任务的方法:
from textblob import TextBlob
# 电影评论
reviews = [
"这部电影太棒了!演技一流,情节吸引人。",
"我不喜欢这部电影。故事预测性强,角色单一。",
"这部影片有它的时刻,但总体上是让人失望的。节奏慢,结局不满意。"
]
# 对每条评论进行情感分析
for review in reviews:
blob = TextBlob(review)
sentiment = blob.sentiment
print("评论:", review)
print("情感极性:", sentiment.polarity)
print("情感主观性:", sentiment.subjectivity)
print("---")
这段代码片段定义了一组电影评论。然后,它遍历每条评论,并从评论文本创建一个 TextBlob
对象。TextBlob
对象的 sentiment
属性提供情感分析结果。polarity
分数从 -1(负面情感)到 1(正面情感)变化,而 subjectivity
分数从 0(客观)到 1(主观)变化。为每条评论打印情感分析结果,包括极性和主观性分数。