在一个阳光明媚的下午,程序员小明正坐在电脑前,面对着一堆杂乱无章的文件夹和文件,陷入了深深的思考:
“为什么每次都要手动创建文件夹和文件?难道我的时间不值钱吗?难道我的手指不累吗?难道我的大脑不想休息吗?”
于是,小明灵光一闪,决定用 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 文件,供其他程序读取和使用。