Python批量生成文件夹树

@原文参考


Excel的结构是这样的,规律可以自己看看

我的代码是这样的,和参考示例差不多:

# coding:utf-8

import xlrd
import os

DIRPATH = os.path.dirname(os.path.realpath(__file__)) #读取当前地址
excelFILE = r".\test.xls" #指定Excel路径

# 获取数据列表
def get_data_by_xls(xlsfile):
    '''通过xls文档得到数据列表'''
    wb = xlrd.open_workbook(xlsfile)
    table = wb.sheets()[0]
    rows = table.nrows
    for i in range(rows):
        yield table.row_values(i)

#根据数据列表创建文件夹
def createDir(dirPath, xList):
    '''应用递归,生成文档数'''
    try:
        rPath = os.path.join(dirPath, xList[0])
        try:
            os.mkdir(rPath)
            rList = xList[1:]
            print(os.path.join(DIRPATH,rList))
        except:
            rList = xList[1:]
        createDir(rPath, rList)
    except:
        pass

#循环调用生成文件夹
for i in get_data_by_xls(excelFILE):
    if i:
        createDir(DIRPATH, i)

执行代码后生成的文件夹效果是这样的:


这里重点说一下和原博主不一样的地方

  1. 原文中对文件的引用使用了 sys.argv[] ,这是个啥可以直接百度,我这里为了效果直接使用的 r".\test.xls" ,相对引用;
  2. 原文中使用了转码操作,这一步卡了我一晚上,本文中生成对应的文件夹指定的地址是项目自身的路径,然后根据Excel中设定的文件夹名称和等级来创建文件夹并对应层级关系,但是通过 encodeText = lambda a: a.encode("gb2312") 转码后我打印了一下Excel中定义的文件夹名称,是这样的:但是实际上他应该是这样的:如果使用转码后再组装路径,会出现如下报错:TypeError: Can't mix strings and bytes in path components拼装类型错误,因为项目当前地址是正确的中文,但是Excel中设定的路径通过转码后就不再是中文了,两个路径的数据格式不一样,拼装是不可能成功的,所以这里我去掉了原文中的转码操作。
  3. 我觉得原文中的递归用得绝妙!
posted @ 2021-12-04 17:07  藤井の树  阅读(303)  评论(0编辑  收藏  举报