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

31. 使用 glob 自动化文件搜索

Python 的 glob 模块提供了一种使用通配符模式搜索文件和目录的方法。你可以根据特定的模式自动搜索文件。

示例:搜索具有特定扩展名的文件

假设你想在目录中搜索具有特定扩展名的所有文件。下面是如何使用 glob 模块自动化这个任务的方法:

import glob  

# 要搜索的目录  
directory = 'path/to/directory'  

# 搜索具有特定扩展名的文件  
extension = '*.txt'  
files = glob.glob(directory + '/' + extension)  

# 打印匹配的文件  
for file in files:  
    print(file)

这段代码定义了要搜索文件的目录和所需的文件扩展名。它使用 glob.glob() 函数来搜索与指定模式匹配的文件。模式是通过连接目录路径和扩展名通配符模式构建的。匹配的文件存储在 files 列表中。最后,它遍历匹配文件列表并打印每个文件的路径。

32. 使用正则表达式自动化文件重命名

Python 的 re 模块提供了对正则表达式的支持,可以用于模式匹配和字符串操作。你可以使用正则表达式自动化根据特定模式重命名文件。

示例:根据模式重命名文件

假设你有一个包含具有特定命名模式的文件的目录,并且想根据不同的模式对它们进行重命名。下面是如何使用正则表达式自动化这个任务的方法:

import os  
import re  

# 包含要重命名文件的目录  
directory = 'path/to/directory'  

# 用于匹配文件名的正则表达式模式  
pattern = r'file_(\d+)\.txt'  

# 遍历目录中的文件  
for filename in os.listdir(directory):  
    # 检查文件名是否与模式匹配  
    match = re.match(pattern, filename)  
    if match:  
        # 提取匹配的组(数字)  
        number = match.group(1)  
          
        # 创建新文件名  
        new_filename = f'newfile_{number}.txt'  
          
        # 重命名文件  
        old_path = os.path.join(directory, filename)  
        new_path = os.path.join(directory, new_filename)  
        os.rename(old_path, new_path)  
          
        print(f"已重命名:{filename} -> {new_filename}")

34. 使用 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() 方法对数据进行加密。加密的数据,连同随机数和标签,写入名为 ‘encrypted_file.bin’ 的新文件。要解密文件,它从加密文件中读取随机数、标签和密文。它使用相同的密钥和随机数创建新的 AES 密码器对象。`decrypt_and

_verify()` 方法用于解密密文并验证完整性使用标签。然后,解密的数据被写入名为 ‘decrypted_file.txt’ 的新文件。

35. 使用 bz2 自动化文件压缩

Python 的 bz2 模块提供了使用 bzip2 压缩算法对文件进行压缩和解压缩的支持。你可以使用 Python 自动化文件压缩,以节省存储空间并减少文件传输时间。

示例:使用 bzip2 压缩和解压缩文件

假设你想使用 bzip2 压缩文件,然后再解压缩它。下面是如何使用 Python 自动化这个任务的方法:

import bz2  

# 要压缩的文件  
file_to_compress = 'example.txt'  

# 压缩文件  
with open(file_to_compress, 'rb') as file_in:  
    with bz2.open(file_to_compress + '.bz2', 'wb') as file_out:  
        file_out.write(file_in.read())  

print("文件成功压缩。")  

# 解压缩文件  
with bz2.open(file_to_compress + '.bz2', 'rb') as file_in:  
    with open('decompressed_file.txt', 'wb') as file_out:  
        file_out.write(file_in.read())  

print("文件成功解压缩。")

这段代码以二进制读取模式(‘rb’)打开要压缩的文件。然后,它使用 bz2.open() 在二进制写入模式(‘wb’)下创建一个新的 bzip2 文件。使用 write() 将原始文件的内容写入 bzip2 文件。要解压缩文件,它以二进制读取模式(‘rb’)打开 bzip2 文件。然后,使用二进制写入模式(‘wb’)将解压缩的内容写入名为 ‘decompressed_file.txt’ 的新文件。

36. 使用 Pillow 自动化图片转换

Python 的 Pillow 库提供了对图像的处理功能,包括将图像从一种格式转换为另一种格式。你可以使用 Pillow 自动化将多个图像转换为特定格式的过程。

示例:将图像转换为 JPEG 格式

假设你有一个包含不同格式的图像的目录,并且想将所有图像转换为 JPEG 格式。下面是如何使用 Pillow 自动化这个任务的方法:

from PIL import Image  
import os  

# 包含图像的目录  
image_directory = 'path/to/image/directory'  

# 遍历目录中的图像  
for filename in os.listdir(image_directory):  
    if filename.endswith('.png') or filename.endswith('.bmp'):  
        # 打开图像  
        image_path = os.path.join(image_directory, filename)  
        image = Image.open(image_path)  
          
        # 将图像转换为 JPEG 格式  
        new_filename = os.path.splitext(filename)[0] + '.jpg'  
        new_image_path = os.path.join(image_directory, new_filename)  
        image.save(new_image_path, 'JPEG')  
          
        print(f"已转换:{filename} -> {new_filename}")  

print("图像转换完成。")

这段代码遍历指定图像目录中的文件。它检查每个文件是否具有 ‘.png’ 或 ‘.bmp’ 扩展名以识别图像文件。对于每个图像文件,它使用 Pillow 库的 Image.open() 打开图像。然后,使用 save() 方法将图像转换为 JPEG 格式,并指定带有 ‘.jpg’ 扩展名的新文件名。转换后的图像保存在相同目录中,并打印每个图像的转换信息。最后,它打印一条消息,指示图像转换过程已完成。

37. 使用 Dropbox API 自动化文件备份到云存储

Python 提供了与各种云存储服务交互的库,如 Dropbox。你可以使用 Dropbox API 自动化将文件备份到 Dropbox。

示例:将文件备份到 Dropbox

假设你想备份特定文件到 Dropbox。下面是如何使用 Dropbox API 自动化这个任务的方法:

import dropbox  

# Dropbox 访问令牌  
ACCESS_TOKEN = 'your_access_token'  

# 要备份的文件  
files_to_backup = ['file1.txt', 'file2.txt', 'file3.txt']  

# 创建 Dropbox 客户端  
dbx = dropbox.Dropbox(ACCESS_TOKEN)  

# 将每个文件备份到 Dropbox  
for file in files_to_backup:  
    with open(file, 'rb') as f:  
        dbx.files_upload(f.read(), f'/backup/{file}')  
        print(f"已备份:{file}")  

print("文件备份完成。")

这段代码假设你已经获得了 Dropbox API 的访问令牌。你需要用你的实际访问令牌替换 'your_access_token'。它定义了要备份的文件列表。然后,它使用 dropbox.Dropbox() 构造函数创建 Dropbox 客户端,传递访问令牌。它遍历要备份的文件。对于每个文件,它以二进制读取模式(‘rb’)打开文件,并使用 files_upload() 方法将其内容上传到 Dropbox,指定在 Dropbox 中的 ‘/backup/’ 目录下的路径。它打印每个文件备份的信息,并最后打印一条消息,指示文件备份过程已完成。

38. 使用 BeautifulSoup 自动化网络爬虫

Python 的 BeautifulSoup 库被广泛用于网络爬虫任务。它允许你解析 HTML 和 XML 文档,并从网页中提取所需信息。

示例:从电子商务网站抓取产品信息

假设你想从一个电子商务网站上抓取产品信息。下面是如何使用 BeautifulSoup 自动化这个任务的方法:

import requests  
from bs4 import BeautifulSoup  

# 电子商务网站的 URL  
url = '

https://www.example.com/products'  

# 发送 GET 请求到 URL  
response = requests.get(url)  

# 创建 BeautifulSoup 对象  
soup = BeautifulSoup(response.content, 'html.parser')  

# 查找所有产品元素  
products = soup.find_all('div', class_='product')  

# 从每个产品中提取信息  
for product in products:  
    name = product.find('h3', class_='product-name').text  
    price = product.find('span', class_='product-price').text  
    description = product.find('p', class_='product-description').text  
      
    print(f"产品:{name}")  
    print(f"价格:{price}")  
    print(f"描述:{description}")  
    print("---")

这段代码使用 requests.get() 发送到指定 URL 的 GET 请求。然后,它通过传递响应内容和要使用的 HTML 解析器创建了一个 BeautifulSoup 对象。它使用 find_all() 找到页面上的所有产品元素,使用适当的 CSS 类选择器。然后,它遍历每个产品元素,并使用 find() 和相应的 CSS 类选择器提取所需的信息,如产品名称、价格和描述。对于每个产品,它打印提取的信息,并用一行破折号分隔。

39. 使用 rsync 自动化文件同步

Python 的 subprocess 模块允许你从 Python 脚本中执行 shell 命令,包括 rsync。你可以使用 rsync 自动化文件同步任务,以保持不同目录或机器之间的文件同步。

示例:在本地目录之间同步文件

假设你想在两个本地目录之间同步文件。下面是如何使用 rsync 自动化这个任务的方法:

import subprocess  

# 源目录  
source_dir = '/path/to/source/directory/'  

# 目标目录  
dest_dir = '/path/to/destination/directory/'  

# rsync 命令  
rsync_command = ['rsync', '-avz', '--delete', source_dir, dest_dir]  

# 执行 rsync 命令  
subprocess.run(rsync_command, check=True)  

print("文件同步完成。")

这段代码定义了文件同步的源目录和目标目录。它构造了 rsync 命令,其中包括必要的选项:

  • -a:归档模式,保留权限和时间戳
  • -v:详细输出
  • -z:在传输过程中压缩数据
  • --delete:删除目标中不存在于源中的文件

使用 subprocess.run() 执行 rsync 命令,该命令作为子进程运行。check=True 参数确保如果命令失败,则引发异常。最后,它打印一条消息,指示文件同步过程已完成。

40. 使用 zipfile 自动化文件压缩和归档

Python 的 zipfile 模块允许你创建和提取 ZIP 归档。你可以使用它自动化将文件压缩和归档到 ZIP 归档中,并从 ZIP 归档中提取文件。

示例:创建和提取 ZIP 归档

假设你想创建一个包含多个文件的 ZIP 归档,并稍后从归档中提取文件。下面是如何使用 zipfile 模块自动化这个任务的方法:

import zipfile  

# 要包含在归档中的文件  
files_to_archive = ['file1.txt', 'file2.txt', 'file3.txt']  

# ZIP 归档的名称  
archive_name = 'example.zip'  

# 创建 ZIP 归档  
with zipfile.ZipFile(archive_name, 'w') as zip_file:  
    for file in files_to_archive:  
        zip_file.write(file)  

print("ZIP 归档创建成功。")  

# 从 ZIP 归档中提取文件  
with zipfile.ZipFile(archive_name, 'r') as zip_file:  
    zip_file.extractall()  

print("文件提取成功。")

这段代码定义了要包含在 ZIP 归档中的文件列表和归档的名称。它以写入模式(‘w’)使用 zipfile.ZipFile() 打开 ZIP 归档。然后,它遍历要归档的文件,并使用 write() 方法将每个文件添加到归档中。要从 ZIP 归档中提取文件,它以读取模式(‘r’)再次使用 zipfile.ZipFile() 打开归档,并使用 extractall() 方法提取所有文件。最后,它打印消息,指示 ZIP 归档的创建和文件提取过程已完成。

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值