创作不易,还请各位同学三连点赞!!收藏!!转发!!!

对于刚入门学习Python还找不到方向的小伙伴可以试试我的这份学习方法和籽料,免费自取!!

 

引言

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

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")

输出示例

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 占用。

总结

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

资源分享

读者福利:对Python感兴趣的童鞋,为此我专门给大家准备好了Python全套的学习资料

​​

 Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片​​​

视频教程

大信息时代,传统媒体远不如视频教程那么生动活泼,一份零基础到精通的全流程视频教程分享给大家

图片​​​

实战项目案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片​​​

图片​​​

副业兼职路线

​​​

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐