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

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

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值