python脚本-批量创建文件夹和下属的文件

在一个阳光明媚的下午,程序员小明正坐在电脑前,面对着一堆杂乱无章的文件夹和文件,陷入了深深的思考:

“为什么每次都要手动创建文件夹和文件?难道我的时间不值钱吗?难道我的手指不累吗?难道我的大脑不想休息吗?”

于是,小明灵光一闪,决定用 Python 写一个“文件夹和文件批量生成器”,简称 “文件夹魔法师”。这个工具不仅能帮他快速创建文件夹和文件,还能让他的工作效率翻倍,甚至让他有时间去喝杯咖啡,享受生活。

import os

# 定义级联文件夹和文件的层级关系
hierarchy = {
    "dir": "root",  # 根目录
    "children": [
        {
            "dir": "folder1",  # 子文件夹
            "children": [
                {"file": "file1.txt"},  # 文件
                {"file": "file2.txt"}
            ]
        },
        {
            "dir": "folder2",  # 子文件夹
            "children": [
                {"file": "file3.txt"},
                {
                    "dir": "subfolder2_1",  # 嵌套文件夹
                    "children": [
                        {"file": "file4.txt"},
                        {"file": "file5.txt"}
                    ]
                }
            ]
        },
        {"file": "root_file.txt"}  # 根目录下的文件
    ]
}

# 递归函数:遍历对象并创建文件夹和文件
def create_hierarchy(node, base_path):
    if "dir" in node:  # 如果是文件夹
        folder_path = os.path.join(base_path, node["dir"])
        os.makedirs(folder_path, exist_ok=True)  # 创建文件夹
        if "children" in node:
            for child in node["children"]:
                create_hierarchy(child, folder_path)  # 递归处理子节点
    elif "file" in node:  # 如果是文件
        file_path = os.path.join(base_path, node["file"])
        with open(file_path, "w") as f:
            f.write(f"This is file: {node['file']}")  # 创建文件并写入内容

# 设置根目录
base_directory = "C:/code/0.running------------/6.python-tool/脚本/批量创建文件夹及文件"

# 创建级联文件夹和文件
create_hierarchy(hierarchy, base_directory)

print("级联文件夹和文件创建完成!")

核心思想:业务逻辑数据化

1. 什么是业务逻辑数据化?
  • 业务逻辑:指的是实际业务中的规则、流程或需求。例如,创建文件夹和文件的层级结构。

  • 数据化:将这些业务逻辑抽象为数据结构(如字典、列表、JSON 等),而不是直接在代码中写死逻辑。

2. 为什么需要业务逻辑数据化?
  • 灵活性:通过数据描述业务逻辑,可以轻松修改和扩展。

  • 可读性:数据结构比代码逻辑更直观,便于理解和维护。

  • 复用性:数据可以被多个模块或工具复用,减少重复代码。


在这段代码中的体现

1. 业务逻辑:创建文件夹和文件
  • 实际业务需求是创建一个复杂的文件夹和文件结构,例如:

    复制

    root/
    ├── folder1/
    │   ├── file1.txt
    │   └── file2.txt
    ├── folder2/
    │   ├── file3.txt
    │   └── subfolder2_1/
    │       ├── file4.txt
    │       └── file5.txt
    └── root_file.txt
2. 数据化:用嵌套字典描述层级结构
  • 将上述业务逻辑抽象为一个嵌套的字典:

    hierarchy = {
        "dir": "root",
        "children": [
            {
                "dir": "folder1",
                "children": [
                    {"file": "file1.txt"},
                    {"file": "file2.txt"}
                ]
            },
            {
                "dir": "folder2",
                "children": [
                    {"file": "file3.txt"},
                    {
                        "dir": "subfolder2_1",
                        "children": [
                            {"file": "file4.txt"},
                            {"file": "file5.txt"}
                        ]
                    }
                ]
            },
            {"file": "root_file.txt"}
        ]
    }
3. 操作数据:通过递归函数完成业务
  • 通过递归函数 create_hierarchy 遍历 hierarchy 数据,完成文件夹和文件的创建:

    def create_hierarchy(node, base_path):
        if "dir" in node:
            folder_path = os.path.join(base_path, node["dir"])
            os.makedirs(folder_path, exist_ok=True)
            if "children" in node:
                for child in node["children"]:
                    create_hierarchy(child, folder_path)
        elif "file" in node:
            file_path = os.path.join(base_path, node["file"])
            with open(file_path, "w") as f:
                f.write(f"This is file: {node['file']}")

为什么这种思想很强大?

1. 灵活性
  • 如果需要修改文件夹和文件的结构,只需修改 hierarchy 数据,而不需要修改代码逻辑。

  • 例如,新增一个文件夹或文件:

    hierarchy["children"].append({
        "dir": "folder3",
        "children": [
            {"file": "file6.txt"}
        ]
    })
2. 可扩展性
  • 可以轻松扩展功能,例如:

    • 支持文件内容自定义。

    • 支持文件权限设置。

    • 支持从外部文件(如 JSON 或 YAML)读取层级结构。

3. 可读性
  • 数据结构比代码逻辑更直观,便于理解和维护。

  • 例如,hierarchy 数据清晰地展示了文件夹和文件的层级关系。

4. 复用性
  • 数据可以被多个模块或工具复用。

  • 例如,可以将 hierarchy 数据保存为 JSON 文件,供其他程序读取和使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值