主页

python根据表格内容批量创建文件夹

森花   IP属地: 青海
1 点赞 0阅读 1493
根据表格中的内容在本地创建对应文件夹和子文件夹,但是表格格式为先创建好的固定格式,比如空文件夹加用"N/A"表示,表格格式如下

根据以上表格格式在本地创建对应文件夹


"""
根据 Excel 表格的列位置层级,自动创建对应的文件夹结构
适用于:每一列代表一个层级的表格
"""

import os
import openpyxl


def clean_name(name):
    """清洗文件夹名称"""
    if name is None or str(name).strip().upper() == 'N/A':
        return None
    name = str(name).strip()
    if not name:
        return None
    # Windows 不支持的字符替换
    for ch in ['/', '\\', ':', '*', '?', '"', '<', '>', '|']:
        name = name.replace(ch, '_')
    return name


def main():
    # ===== 配置区域(根据你的实际情况修改) =====
    xlsx_filename = '11.xlsx'       # Excel 文件名
    sheet_name = 'Sheet1'            # 工作表名称
    output_dir = './output_folders'  # 输出根目录
    # ==========================================

    script_dir = os.path.dirname(os.path.abspath(__file__))
    xlsx_path = os.path.join(script_dir, xlsx_filename)

    if not os.path.exists(xlsx_path):
        print(f"x 找不到文件: {xlsx_path}")
        return

    wb = openpyxl.load_workbook(xlsx_path)
    ws = wb[sheet_name]

    stack = []       # 记录每列当前的有效文件夹名
    created_dirs = []

    for row in ws.iter_rows(min_row=1, max_row=ws.max_row, max_col=ws.max_column):
        for col_idx, cell in enumerate(row):
            folder_name = clean_name(cell.value)
            if folder_name is None:
                continue

            # 维护栈的深度 = 当前列索引
            if len(stack) > col_idx:
                stack = stack[:col_idx]
                stack.append(folder_name)
            else:
                stack.append(folder_name)

            # 构建完整路径
            full_path = os.path.join(output_dir, *stack)
            os.makedirs(full_path, exist_ok=True)
            created_dirs.append(full_path)

            indent_str = '  ' * col_idx
            print(f"{indent_str} {folder_name}")

    print(f"\n 完成!共创建 {len(created_dirs)} 个文件夹")
    print(f" 输出目录: {os.path.abspath(output_dir)}")


if __name__ == '__main__':
    main()

如果没有openpyxl库文件需要下载

   pip install openpyxl

改进版

"""
根据 Excel 表格的列位置层级,自动创建对应的文件夹结构
适用于:每一列代表一个层级的表格
"""

import os
import openpyxl


def clean_name(name):
    """清洗文件夹名称"""
    if name is None or str(name).strip().upper() == 'N/A':
        return None
    name = str(name).strip()
    if not name:
        return None
    # Windows 不支持的字符替换
    for ch in ['/', '\\', ':', '*', '?', '"', '<', '>', '|']:
        name = name.replace(ch, '_')
    return name

def main():
    # ===== 配置区域(根据你的实际情况修改) =====
    xlsx_filename = '22.xlsx'       # Excel 文件名
    output_dir = './output_folders'  # 输出根目录
    # ==========================================

    script_dir = os.path.dirname(os.path.abspath(__file__))
    xlsx_path = os.path.join(script_dir, xlsx_filename)

    if not os.path.exists(xlsx_path):
        print(f"x 找不到文件: {xlsx_path}")
        return

    wb = openpyxl.load_workbook(xlsx_path)

    # ========== 自动获取工作表 ==========
    print(" 工作表列表:")
    for i, name in enumerate(wb.sheetnames, 1):
        print(f"  [{i}] '{name}'")
    ws = wb[wb.sheetnames[0]]
    print(f" 当前使用工作表: '{wb.sheetnames[0]}'")
    # ===================================

    stack = []       # 记录每列当前的有效文件夹名
    created_dirs = []

    for row in ws.iter_rows(min_row=1, max_row=ws.max_row, max_col=ws.max_column):
        for col_idx, cell in enumerate(row):
            folder_name = clean_name(cell.value)
            if folder_name is None:
                continue

            # 维护栈的深度 = 当前列索引
            if len(stack) > col_idx:
                stack = stack[:col_idx]
                stack.append(folder_name)
            else:
                stack.append(folder_name)

            # 构建完整路径
            full_path = os.path.join(output_dir, *stack)
            os.makedirs(full_path, exist_ok=True)
            created_dirs.append(full_path)

            indent_str = '  ' * col_idx
            print(f"{indent_str} {folder_name}")

    print(f"\n 完成!共创建 {len(created_dirs)} 个文件夹")
    print(f" 输出目录: {os.path.abspath(output_dir)}")


if __name__ == '__main__':
    main()


测试文件下载:点击下载

© 著作权归作者所有,转载或内容合作请联系作者