当前位置: 华文星空 > 军情

必备的Python操作系统的6个自动化脚本

2024-09-23军情

引言

在日常工作中,我们经常需要处理大量的文件操作,如重命名、搜索、同步等。通过编写自动化脚本,不仅可以提高效率,还能减少错误。本文将介绍几个常用的文件操作脚本,包括文件重命名、搜索、同步、压缩、解压以及日志监控。

1. 文件重命名脚本

在处理大量文件时,手动重命名不仅耗时还容易出错。下面是一个使用 Python 编写的文件批量重命名脚本。

import os
def rename_files (directory, prefix="new_") :
"""
批量重命名指定目录下的所有文件。
:param directory: 要处理的文件夹路径
:param prefix: 新文件名前缀,默认为 "new_"
"""
# 获取指定目录下所有文件名
files = os.listdir(directory)
for index, file in enumerate(files):
# 获取文件扩展名
extension = os.path.splitext(file)[1]
# 构建新文件名
new_name = f"{prefix}{index}{extension}"
# 拼接完整路径
old_path = os.path.join(directory, file)
new_path = os.path.join(directory, new_name)
# 重命名文件
os.rename(old_path, new_path)
print( f"Renamed {file} to {new_name}" )
# 使用示例
rename_files("/path/to/your/directory")

输出示例:

Renamed old_file1.txt to new_0.txt
Renamed old_file2.jpg to new_1.jpg
...

代码解析:

  • os.listdir() 返回指定目录下的所有文件和子目录名。

  • os.path.splitext() 分离文件名与扩展名。

  • os.path.join() 拼接路径。

  • os.rename() 用于重命名文件。

  • 2. 文件搜索脚本

    在文件系统中查找特定文件是常见的需求。此脚本可以在指定目录及其子目录中搜索包含特定字符串的文件。

    import os
    def search_files(directory, keyword):
    """
    在指定目录及其子目录中搜索包含特定字符串的文件。
    :param directory: 要搜索的目录
    :param keyword: 关键词
    """
    for root, dirs, files in os.walk(directory):
    for file in files:
    if keyword in file:
    print(os.path.join(root, file))
    # 使用示例
    search_files("/path/to/your/directory", "example")

    输出示例:

    /path/to/your/directory/subdir/example.txt
    /path/to/your/directory/subdir/another_example.docx
    ...

    代码解析:

  • os.walk() 遍历指定目录树中的文件名。

  • root 是当前目录路径。

  • dirs 是该目录下的子目录列表。

  • files 是该目录下的文件列表。

  • 3. 目录同步脚本

    同步两个目录的内容,在备份或部署场景中非常有用。下面这个脚本可以将源目录中的所有文件复制到目标目录中。

    import shutil
    import os
    def sync_directories(src, dst):
    """
    同步两个目录的内容。
    :param src: 源目录
    :param dst: 目标目录
    """
    # 创建目标目录(如果不存在)
    if not os.path.exists(dst):
    os.makedirs(dst)
    # 复制文件
    for item in os.listdir(src):
    s = os.path.join(src, item)
    d = os.path.join(dst, item)
    if os.path.isdir(s):
    sync_directories(s, d)
    else:
    shutil.copy2(s, d)
    print( f"Copied {s} to {d}" )
    # 使用示例
    sync_directories("/path/to/source", "/path/to/destination")

    输出示例:

    Copied /path/to/source/file1.txt to /path/to/destination/file1.txt
    Copied /path/to/source/subdir/file2.txt to /path/to/destination/subdir/file2.txt
    ...

    代码解析:

  • shutil.copy2() 复制文件并保留元数据。

  • 使用递归调用来处理子目录。

  • 4. 文件压缩脚本

    在传输或存储大文件时,压缩文件可以显著节省空间和时间。以下脚本可以将指定目录下的所有文件压缩成一个 .zip 文件。

    import zipfile
    import os
    def compress_directory(directory, output_zip):
    """
    将指定目录下的所有文件压缩成一个 .zip 文件。
    :param directory: 要压缩的目录
    :param output_zip: 输出的 .zip 文件路径
    """
    with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
    for root, dirs, files in os.walk(directory):
    for file in files:
    file_path = os.path.join(root, file)
    arcname = os.path.relpath(file_path, directory)
    zipf.write(file_path, arcname=arcname)
    print( f"Added {file_path} to {output_zip}" )
    # 使用示例
    compress_directory("/path/to/your/directory", "/path/to/output.zip")

    输出示例:

    Added /path/to/your/directory/file1.txt to /path/to/output.zip
    Added /path/to/your/directory/subdir/file2.txt to /path/to/output.zip
    ...

    代码解析:

  • zipfile.ZipFile() 创建一个新的 .zip 文件对象。

  • write() 方法将文件添加到 .zip 文件中。

  • os.path.relpath() 计算相对路径。

  • 5. 文件解压脚本

    与压缩脚本相对应,解压脚本可以将压缩文件还原成原始文件结构。以下脚本可以解压指定的 .zip 文件到指定目录。

    import zipfile
    import os
    def extract_zip(zip_file, output_directory):
    """
    解压指定的 .zip 文件到指定目录。
    :param zip_file: 要解压的 .zip 文件路径
    :param output_directory: 输出目录
    """
    with zipfile.ZipFile(zip_file, 'r') as zipf:
    zipf.extractall(output_directory)
    print( f"Extracted all files from {zip_file} to {output_directory}" )
    # 使用示例
    extract_zip("/path/to/input.zip", "/path/to/output_directory")

    输出示例:

    Extracted all files from /path/to/input.zip to /path/to/output_directory

    代码解析:

  • extractall() 方法将 .zip 文件中的所有文件解压到指定目录。

  • os.path.join() 拼接路径。

  • 6. 日志监控脚本

    对于服务器管理和运维来说,实时监控日志文件非常重要。以下脚本可以实时监控指定的日志文件,并在控制台打印新增的内容。

    import time
    def monitor_log_file(log_file):
    """
    实时监控指定的日志文件,并在控制台打印新增的内容。
    :param log_file: 要监控的日志文件路径
    """
    with open(log_file, 'r') as file:
    file.seek(0, 2) # 移动到文件末尾
    while True:
    line = file.readline()
    if not line:
    time.sleep(1) # 没有新行则等待
    continue
    print(line.strip())
    # 使用示例
    monitor_log_file("/path/to/logfile.log")

    输出示例:

    阅读:sfangba.com/184.html阅读:sfangba.com/183.html阅读:sfangba.com/182.html阅读:sfangba.com/179.html阅读:sfangba.com/178.html阅读:sfangba.com/177.html阅读:sfangba.com/176.html阅读:sfangba.com/175.html阅读:sfangba.com/174.html阅读:sfangba.com/173.html阅读:sfangba.com/172.html阅读:sfangba.com/171.html

    2023-10-01 12:00:00 - INFO - Some message
    2023-10-01 12:00:01 - ERROR - An error occurred
    ...

    代码解析:

  • file.seek(0, 2) 将文件指针移动到文件末尾。

  • readline() 读取一行。

  • time.sleep(1) 暂停一秒以减少 CPU 占用。

  • 总结

    本文介绍了六个实用的文件操作脚本,包括文件重命名、文件搜索、目录同步、文件压缩与解压以及日志监控。这些脚本能够帮助我们高效地处理文件系统中的常见任务,提高工作效率。通过自动化这些任务,我们可以更加专注于核心业务逻辑。