20 天学 Python 文件操作:Day 20 综合案例实战

liftword3周前 (01-17)技术文章18

经过 19 天的学习,我们已经掌握了 Python 文件操作的方方面面。今天,我们将通过一个综合案例,把这些知识点串联起来,为文件操作的学习画上完美的句号。


综合案例:文件分类与整理工具

需求描述: 编写一个 Python 脚本,扫描指定目录,按照文件类型将文件分类整理到对应的文件夹中,例如:

  • 图片文件(jpg、png)归类到 Images 文件夹。
  • 文档文件(pdf、docx)归类到 Documents 文件夹。
  • 其他文件归类到 Others 文件夹。

实现步骤

1. 创建目标文件夹

首先,创建存放分类文件的目标文件夹:

import os

def create_folders(base_path, folders):
    for folder in folders:
        folder_path = os.path.join(base_path, folder)
        os.makedirs(folder_path, exist_ok=True)
        print(f"已创建文件夹: {folder_path}")

# 测试
base_path = "sorted_files"
folders = ["Images", "Documents", "Others"]
create_folders(base_path, folders)

2. 分类文件

根据文件扩展名,将文件分类到对应的文件夹中。

import shutil

def classify_files(source_path, base_path):
    file_types = {
        "Images": [".jpg", ".png", ".jpeg"],
        "Documents": [".pdf", ".docx", ".txt"],
    }

    for file in os.listdir(source_path):
        file_path = os.path.join(source_path, file)
        if os.path.isfile(file_path):
            moved = False
            for folder, extensions in file_types.items():
                if os.path.splitext(file)[1].lower() in extensions:
                    shutil.move(file_path, os.path.join(base_path, folder, file))
                    print(f"已移动文件: {file} -> {folder}")
                    moved = True
                    break
            if not moved:
                shutil.move(file_path, os.path.join(base_path, "Others", file))
                print(f"已移动文件: {file} -> Others")

# 测试
source_path = "unsorted_files"
classify_files(source_path, base_path)

3. 打印分类结果

完成分类后,打印整理好的文件结构:

def print_sorted_files(base_path):
    for folder in os.listdir(base_path):
        folder_path = os.path.join(base_path, folder)
        print(f"\n{folder}:")
        for file in os.listdir(folder_path):
            print(f"  - {file}")

# 测试
print_sorted_files(base_path)

4. 综合代码

将上述功能整合到一个完整的脚本中:

import os
import shutil

def create_folders(base_path, folders):
    for folder in folders:
        os.makedirs(os.path.join(base_path, folder), exist_ok=True)

def classify_files(source_path, base_path):
    file_types = {
        "Images": [".jpg", ".png", ".jpeg"],
        "Documents": [".pdf", ".docx", ".txt"],
    }
    for file in os.listdir(source_path):
        file_path = os.path.join(source_path, file)
        if os.path.isfile(file_path):
            for folder, extensions in file_types.items():
                if os.path.splitext(file)[1].lower() in extensions:
                    shutil.move(file_path, os.path.join(base_path, folder, file))
                    break
            else:
                shutil.move(file_path, os.path.join(base_path, "Others", file))

def print_sorted_files(base_path):
    for folder in os.listdir(base_path):
        folder_path = os.path.join(base_path, folder)
        print(f"\n{folder}:")
        for file in os.listdir(folder_path):
            print(f"  - {file}")

# 综合测试
source_path = "unsorted_files"
base_path = "sorted_files"
folders = ["Images", "Documents", "Others"]

create_folders(base_path, folders)
classify_files(source_path, base_path)
print_sorted_files(base_path)

5. 实践练习

  1. 添加更多的文件类型分类,例如音乐文件(mp3、wav)。
  2. 扩展功能:支持递归扫描子目录中的文件。
  3. 优化代码:为每种文件类型计算总大小并输出统计信息。

恭喜你完成了 20 天的 Python 文件操作学习!!!!

相关文章

10分钟学会python写游戏脚本!Python其实很简单

前言最近在玩儿公主连结,...

python生成脚本与部署的方案

上周接到一个需求任务,去...

PyScript:让 Python 脚本在 Web 中跑起来

这是下一个大事件吗?如果...