python根据excel内容生成文件夹

工作需要根据excel数据信息,生成对应的文件夹,用python写了一个脚本处理了一下。 样例中表格内容也进行了调整。

  • 环境:

    • windows10
    • python3.7 + openpyxl
  • 目标:

    以list.xlsx数据为准,抽取指定sheet页中的指定字段信息,生成目录, 并在目录中创建固定的子目录.

  • 表格格式:

    • 表格sheet-A01
    序号项目名称备注
    1项目1张三
    2项目2李四
    • 表格sheet-A02
    序号项目名称备注
    1项目1王五

    每一个sheet存放一个批次的任务信息, total为批次名称

  • 代码:

from openpyxl import load_workbook
from openpyxl import Workbook
import os
import re

## 获取项目清单列表
wb = load_workbook( filename = '.\\test\\list.xlsx')
#ws_in = wb_in.active
outpath=".\\out\\"

## 名字列表开始结束行号 
start_index = 4 
##end_index = 

## 目录编号
dir_no = 1

## 1. 找到指定的sheet页面

sheets_name = ['A01', 'A02']

## 3. 组成符合要求的目录字符串创建目录

def mkdir(path):
    try:
        os.makedirs(path)
        print("CREATE")
    except FileExistsError: 
        print("EXIST, NO CREATE")

# Get all dirs
def mksubdir(path):
    try:
        dirnames = [name for name in os.listdir('.\\model')
              if os.path.isdir(os.path.join('.\\model', name))]
        for i in dirnames:
            mkdir(path+"\\"+i)
    except :
        print(" CREATE SUB DIR ERROR ")

for i in range(len(sheets_name)):

    print(i)
    sheet = wb[sheets_name[i]]
    print(sheet)

    ## 2. 找到相关的任务信息
    for row in range(start_index, sheet.max_row+1):

        ## 1. 判断内容是否空格 0 or 1? 
        if (str(sheet.cell(row, column=1).value).strip() == "None" ):
            print(batch_no + " is over")
            break;

        ##2. 获取表格内容生成目录
        task_no = sheet.cell(row, column=1).value
        batch_no = sheet.title.split('-')[0] 
        task_context = str(sheet.cell(row, column=2).value).strip() 
        task_manager = re.search(r'张三|李四|王五', sheet.cell(row,column=3).value)
        task_leader = task_manager.group(0)

        #(序号)-批次号-批次序号-任务名称(负责人)
        # mkdir(path)
        dir_no_str = format(dir_no, '02d')
        task_no_str = format(task_no, '02d')
        dirname=dir_no_str+"-"+batch_no+"-"+task_no_str+"-"+task_context+"-"+task_leader
        mkdir(outpath+dirname)

        # mksubdir(path)
        mksubdir(outpath+dirname)

        dir_no = dir_no+1
  • 运行结果

├─01-A01-01-项目1-张三 │ ├─01_文档目录1 │ └─02_文档目录2 ├─02-A01-02-项目2-李四 │ ├─01_文档目录1 │ └─02_文档目录2 └─03-A02-01-项目3-王五 ├─01_文档目录1 └─02_文档目录2

参考

Openpyxl Doc Python Cookbook 3rd Edition Documentation