Python读取excel数据并创建文件目录树-全解析过程及逻辑

news2024/9/24 7:14:46

需求描述:

需要将以下excel内的结构解析,并创建对应的文件目录
在这里插入图片描述

实现思路:

实现思路是通过解析Excel文件中的目录结构,并根据目录结构创建对应的文件夹。

具体的实现步骤如下:

1. 加载指定的Excel文件,获取活动的工作表。
2. 创建一个空的目录栈列表,用于记录当前每一级目录。
3. 遍历工作表中的每一行,从第2行开始。
4. 对于每一行,获取当前行的目录级别。
5. 遍历当前行的每一个单元格,判断是否是目录名。
6. 如果单元格的值不为None且不为"@",则将其作为目录名进行处理。
7. 清空目录栈中当前行级别及以下的目录,以保持目录栈的正确层级关系。
8. 将当前目录名加入目录栈。
9. 根据目录栈中的目录名构建完整的目录路径。
10. 使用函数创建目录,如果目录已存在则忽略。
11. 重复步骤3至步骤10,直到遍历完所有行。
12. 完成目录的创建。

那么,怎么去理解目录栈呢?

当我们遍历Excel文件的每一行时,我们需要记录当前的目录结构。目录栈就像是一个容器,用来存储目录的层级关系。

假设Excel文件中的目录结构是这样的:

目录A
    目录B
        目录C
    目录D
        目录E
            目录F

我们可以使用一个列表来表示目录栈,开始时是一个空列表 []
当我们遍历到第一行时,目录栈为空,我们将目录A加入目录栈中,目录栈变为 ['目录A']
当我们遍历到第二行时,目录栈中已经有了目录A,我们需要将目录B加入目录栈中,所以目录栈变为 ['目录A', '目录B']
当我们遍历到第三行时,目录栈中已经有了目录A和目录B,我们需要将目录C加入目录栈中,所以目录栈变为 ['目录A', '目录B', '目录C']
当我们遍历到第四行时,目录栈中已经有了目录A,我们需要将目录D加入目录栈中,但同时我们需要清空目录栈中目录B和目录C以下的内容,所以目录栈变为 ['目录A', '目录D']
当我们遍历到第五行时,目录栈中已经有了目录A和目录D,我们需要将目录E加入目录栈中,所以目录栈变为 ['目录A', '目录D', '目录E']
当我们遍历到第六行时,目录栈中已经有了目录A、目录D和目录E,我们需要将目录F加入目录栈中,所以目录栈变为 ['目录A', '目录D', '目录E', '目录F']
通过这样的方式,我们使用列表来模拟目录栈的结构,每当遍历到一个新的目录时,我们将其加入目录栈中,并且可以根据需要清空目录栈中的部分内容,以保持正确的目录层级关系。

实现代码:

import openpyxl
import os

def parse_excel(file_path):
    workbook = openpyxl.load_workbook(file_path)
    sheet = workbook.active

    directory_stack = []  # 用于记录当前每一级目录的栈
    for row in sheet.iter_rows(min_row=2, values_only=True):
        level = len(directory_stack)  # 当前行的目录级别

        for i, cell_value in enumerate(row):
            if cell_value is not None and cell_value != "@":
                directory_stack = directory_stack[:i]  # 清空目录栈中当前行级别及以下的目录
                directory_stack.append(cell_value)  # 将当前目录加入目录栈

                directory_path = "\\".join(directory_stack)  # 构建完整的目录路径
                full_path = file_path.replace(os.path.basename(file_path), "") + directory_path
                os.makedirs(full_path, exist_ok=True)  # 创建目录,如果目录已存在则忽略

parse_excel("E:\TEST\文件.xlsx")

代码逻辑:

当我们调用 parse_excel(“E:\TEST\文件.xlsx”) 时,会执行 parse_excel 函数。

在 parse_excel 函数中,首先通过 openpyxl.load_workbook(file_path) 加载指定的 Excel 文件,并将其赋值给 workbook 变量。

然后,通过 workbook.active 获取活动的工作表,并将其赋值给 sheet 变量。

接下来,我们创建一个空列表 directory_stack,用于记录当前每一级目录的栈。

然后,通过遍历 sheet 中的每一行(从第2行开始),我们逐行解析 Excel 文件中的目录结构。

对于每一行,我们首先获取当前行的目录级别,即目录栈 directory_stack 的长度。

然后,我们遍历当前行的每一个单元格,判断单元格的值是否不为 None 且不为 “@”。

如果满足条件,说明该单元格是一个目录名,我们需要对目录栈进行相应的操作。

首先,我们使用 directory_stack = directory_stack[:i] 清空目录栈中当前行级别及以下的目录,这样就保证目录栈中只保留了当前行级别之前的目录。

然后,我们将当前目录加入目录栈,使用 directory_stack.append(cell_value)。

接着,我们根据目录栈中的目录名,构建完整的目录路径。

通过 “\”.join(directory_stack),我们使用反斜杠将目录栈中的目录名连接起来,得到一个完整的目录路径。

最后,我们使用 os.makedirs(full_path, exist_ok=True) 创建目录,如果目录已存在则忽略。

通过这样的逻辑,我们可以根据 Excel 文件中的目录结构,逐行解析并创建对应的文件夹。每一行代表一个目录,每一列代表目录的级别。代码会根据目录的层级关系,构建目录栈,并根据目录栈构建完整的目录路径,最终使用 os.makedirs 函数创建目录。

最终效果图(部分):

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云内容审核服务使用(图片审核)

说明:在项目中,我们经常会对用户上传的内容(如文字、图片)等资源内容进行审核,审核包括两方面,一方面是内容与描述不符,一方面是违反法律法规。本文介绍使用阿里提供的内容审核服务,…

《算法竞赛·快冲300题》每日一题:“最大团”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 最…

zookeeperAPI操作与写数据原理

要执行API操作需要在idea中创建maven项目 (改成自己的阿里仓库)导入特定依赖 添加日志文件 上边操作做成后就可以进行一些API的实现了 目录 导入maven依赖: 创建日志文件: 创建API客户端: (1&#xff09…

Java实现八皇后问题

八皇后问题说明 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于 1848 年提出:在 88 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不…

【数据库】Redis可以替代Mysql吗

Redis和Mysql的搭配 Redis可以替代Mysql吗什么是RedisRedis适用的场景以及优点Redis的缺点 什么是MysqlMysql的优点Mysql缺点 总结 Redis可以替代Mysql吗 Redis不能代替MySQL, Redis和MySQL只能是一种互补。 什么是Redis Redis是一种非关系型数据库,也…

IDEA全局设置MyBatis中写SQL语句提示

把这两个设置改成MySQL即可:

clickhouse 删除操作

OLAP 数据库设计的宗旨在于分析适合一次插入多次查询的业务场景,市面上成熟的 AP 数据库在更新和删除操作上支持的均不是很好,当然 clickhouse 也不例外。但是不友好不代表不支持,本文主要介绍在 clickhouse 中如何实现数据的删除&#xff0c…

获取Spring中bean工具类

获取Spring中bean工具类 工具类 package com.geekmice.springbootselfexercise.utils;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org…

【分布式系统】聊聊流量和数据调度

对于分布式系统来说,除了监控层面、以及服务治理层面,还有两个层面流量和数据调度。流量调度其实比较好理解,就是用户请求的流量,如何按照一定的策略算法打到不同的机器上。以及如何实现一个高可用、高性能的流量调度平台。而数据…

《CUDA C++ Programming Guide》第二章 CUDA 编程模型概述

2.1 内核 CUDA C 通过允许程序员定义称为kernel的 C 函数来扩展 C&#xff0c;当调用内核时&#xff0c;由 N 个不同的 CUDA 线程并行执行 N 次&#xff0c;而不是像常规 C 函数那样只执行一次。 使用 __global__ 声明说明符定义内核&#xff0c;并使用新的 <<<...&g…

CTF PWN之精确覆盖变量数据

刚开始接触pwn的朋友在做pwn练习时可能会有这样的疑问&#xff0c;怎么做到精确覆盖变量数据呢&#xff1f; 我们做pwn练习之前需要先知道&#xff1a;命令行参数C语言的main函数拥有两个参数&#xff0c;为int类型的argc参数&#xff0c;以及char**类型argv参数。其中argc参数…

进入现代云技术的世界-APIGateway、ServiceMesh、OpenStack、异步化框架、云原生框架、命令式API与声明式API

目录 APIGateway Service Mesh OpenStack 异步化框架 云原生框架 命令式API与声明式API APIGateway API网关&#xff08;API Gateway&#xff09;是一个服务器——充当了客户端和内部服务之间的中间层。API网关负责处理API请求&#xff0c;将客户端的请求路由到相应的后端…

centos8.5本地yum源报错

在下载文件出现以下错误 [rootserver ~]# yum install gcc Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use subscription-manager to register. RHEL8.5-BaseOS …

上海亚商投顾:沪指录得4连阴 N盟固利盘中最高涨近37倍

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日延续调整走势&#xff0c;科创50指数跌超1%&#xff0c;创业板指则较为抗跌。医药医疗股集体爆发&#xf…

【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…

Pytorch深度学习-----神经网络模型的保存与加载(VGG16模型)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

前端先行模拟接口(mock+expres+json)

目录 mock模拟数据&#xff1a;data/static.js 路由&#xff1a;index.js 服务器&#xff1a;server.js yarn /node 启动服务器&#xff1a;yarn start 客户端&#xff1a;修改代理路径(修改设置后都要重启才生效) 示例 后端框架express构建服务器 前端发起请求 静态数…

Power BI中实现购物篮分析详解

一、购物篮分析简介 相信&#xff0c;很多人都听过沃尔玛购物篮分析的故事---“啤酒和尿布湿“&#xff0c;即分析购买尿布湿的顾客最喜欢购买的商品是什么&#xff1f;&#xff08;啤酒&#xff09;。在零售终端经营中&#xff0c;通过购物篮分析&#xff0c;分析不同商品之间…

Leetcode-每日一题【剑指 Offer 16. 数值的整数次方】

题目 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c;xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…