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(主观)变化。为每条评论打印情感分析结果,包括极性和主观性分数。