Python教程:拆分多级目录的方法

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章


如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

实现多级目录差分,举例说明如下:

假设现有的目录结构如下:1、2、2.1、2.2、2.3、2.4、3、4、5、6、6.1、6.1.1、6.1.2、6.1.3、6.1.4、6.2、6.3、6.4、7、8、9、10。

经过差分后,得到的各级目录为:

  • 一级目录:1、2、3、4、5、6、7、8、9、10

  • 二级目录:2.1、2.2、2.3、2.4和6.1、6.2、6.3、6.4

– 三级目录:6.1.1、6.1.2、6.1.3、6.1.4

各级目录的名字假设以字符串的方式存放,且最后拆分出的各级目录单独存放。

实现原理

假设目录等级最多三级,那么我们如何实现呢?

我们可以通过给各级目录赋一个权重,然后计算出各个目录对应的权重值,进行比较之后,就可以得到各级目录的分类。

假设各级目录最多有1000个。

(1)一级目录的权重就为1,则一级目录的1到1000对应的权重就是1到1000。

1 ~ 1000 ==> 1 ~ 1000

一级目录所占的数值范围:1 ~ 1000

(2)二级目录的权重赋值如下:

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
1.1 ~ 1.100 ==> 1*1000+1 ~ 1*1000+1002.1 ~ 2.100 ==> 2*1000+1 ~ 2*1000+100'''''' ''''''100.1 ~ 100.100 ==> 100*1000+1 ~ 100*1000+1001000.1 ~ 1000.1000 ==> 1000*1000+1 ~ 1000*1000 + 1000

二级目录所占的数值范围:1000 ~ 1001000

(3) 三级目录的权重赋值如下:

1.1.1 ~ 1.1.100 ==> 1*1000000+1*1000+1 ~ 1*1000000+1*1000+1001.1000.1 ~ 1.1000.1000 ==> 1*1000000+1000*1000+1~ 1*1000000+1000*1000+10001.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+1000

最后,我们只需要将目录按照上述的公式计算出权重,就可以根据权重获得目录所在的目录结构是什么。

代码实现

测试数据:

["1", "2", "2.1", "2.2", "2.3", "2.4", "3", "4", "5", "6", "6.1", "6.1.1", "6.1.2", "6.1.3", "6.1.4", "6.2", "6.3", "6.4", "7", "8", "9", "10"]
1
# encoding: utf-8
import os
import sys
import logging
# 设置logging.basicConfig()方法的参数和配置logging.basicConfig函数
FORMAT = '[%(funcName)s: %(lineno)d]: %(message)s'
LEVEL = logging.INFO
logging.basicConfig(level = LEVEL, format=FORMAT)

‘’’

  • 获取二级标题所在目录名

  • 返回值:二级目录标题名

    目录与数值对应关系:

    1.1 ~ 1.100 ==> 11000+1 ~ 11000+100

    2.1 ~ 2.100 ==> 21000+1 ~ 21000+100

‘’’

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def judge_second_directory(get_num):for i in range(1, 1001, 1):if get_num > i * 1000 and get_num < (i+1)*1000:return str(i) + ".1"return None

‘’’

  • 获取三级标题所在目录名

  • 返回值:三级目录标题名

    目录与数值对应关系:

    1.1.1 ~ 1.1.100 ==> 11000000+11000+1 ~ 11000000+11000+100

    1.2.1 ~ 1.2.1000 ==> 11000000+21000+1 ~ 11000000+21000+1000

‘’’

def judge_three_directory(get_num):ret_str = Nonefor i in range(1, 1001, 1):# 判断二级标题if get_num > i * 1000000 and get_num < (i+1)*1000000:ret_str = str(i) + "."for j in range(1, 1001, 1):# 判断三级标题if get_num > i*1000000 + j*1000 and get_num < i*1000000 + (j+1)*1000:ret_str += str(j) + '.1'return ret_strreturn None

按目录进行分类:

分类原理:

(1) 一级目录:

1 ~ 1000     ==>  1 ~ 1000

一级目录所占的数字范围:1 ~ 1000

(2) 二级目录:

1.1 ~ 1.100 ==>  1*1000+1 ~ 1*1000+100
2.1 ~ 2.100 ==>  2*1000+1 ~ 2*1000+100100.1 ~ 100.100    ==> 100*1000+1 ~ 100*1000+100
1000.1 ~ 1000.1000 ==> 1000*1000+1 ~ 1000*1000 + 1000

二级目录所占的数字范围:1000 ~ 1001000

(3) 三级目录:

1.1.1 ~ 1.1.100        ==> 1*1000000+1*1000+1 ~ 1*1000000+1*1000+100
1.1000.1 ~ 1.1000.1000 ==> 1*1000000+1000*1000+1000
1.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+1000
'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def dirctory_classify(directory_list):parent_directory = []second_directory = {}three_directory  = {}for directory_item in directory_list:num_list = directory_item.split(".")# 开始按目录进行分类if len(num_list) == 1:   # 一级目录parent_directory.append(directory_item)elif len(num_list) == 2: # 二级目录# 例:1.1 ==> 1*1000+1get_num = int(num_list[0]) * 1000 + int(num_list[1])dir_tmp = judge_second_directory(get_num)if dir_tmp == None:continueif dir_tmp not in second_directory:second_directory[dir_tmp] = [directory_item]else:tmp_list = second_directory[dir_tmp]tmp_list.append(directory_item)second_directory[dir_tmp] = tmp_listelif len(num_list) == 3: # 三级目录# 例:1.1.100 ==> 1*1000000+1*1000+100get_num = int(num_list[0])*1000000 + int(num_list[1])*1000 + int(num_list[2])dir_tmp = judge_three_directory(get_num)if dir_tmp == None:continueif dir_tmp not in three_directory:three_directory[dir_tmp] = [directory_item]else:tmp_list = three_directory[dir_tmp]tmp_list.append(directory_item)three_directory[dir_tmp] = tmp_listelse:logging.error("这是一个超过三级目录的条目!!!!")logging.error("num: %s" % directory_item)return [parent_directory, second_directory, three_directory]if __name__ == '__main__':original_data = ["1", "2", "2.1", "2.2", "2.3", "2.4", "3", "4", "5", "6", "6.1", "6.1.1", "6.1.2", "6.1.3", "6.1.4", "6.2", "6.3", "6.4", "7", "8", "9", "10"]directory = dirctory_classify(original_data)parent_directory = directory[0]second_directory = directory[1]three_directory  = directory[2]print ("一级目录:", parent_directory)print ("二级目录:", second_directory)print ("三级目录:", three_directory)

运行测试:

可以看出,测试结果符合预期,一共有三级目录。各级目录中的目录结构也划分了出来。

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

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

相关文章

WinSCP下载安装并实现远程SSH本地服务器上传文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

【Unity学习笔记】第十一 · 动画基础(Animation、状态机、root motion、bake into pose、blendTree、大量案例)

转载引用请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132081959 作者&#xff1a;CSDN|Ringleader| 如果本文对你有帮助&#xff0c;不妨点赞收藏关注一下&#xff0c;你的鼓励是我前进最大的动力&#xff01;ヾ(≧▽≦*)o 主…

#Uniapp:微信开发者工具运行与打包---打包H5---打包app

微信开发者工具运行与打包 manifest.json 添加上微信小程序AppID ** 如果点击打不开从微信开发者工具先到处本地C:\Users\fjgk-28\Desktop\huanrun\uni-demo\uni-shop\unpackage\dist\dev\mp-weixin 打开 添加上AppID试试** 微信开发者工具上传代码需要 "permission&quo…

Redis——list以及他的应用场景

介绍 &#xff1a;list 即是 链表。链表是一种非常常见的数据结构&#xff0c;特点是易于数据元素的插入和删除并且且可以灵活调整链表长度&#xff0c;但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList&#xff0c;但是 C 语言并没有实现…

文件防止泄密的措施,公司如何防止电脑泄密(防止信息泄露的6大秘籍)

在当今信息时代&#xff0c;数据安全和信息保密对于企业来说至关重要。然而&#xff0c;泄密事件时有发生&#xff0c;给企业带来巨大的损失和风险。 某泄密事件&#xff1a; 某大型企业发生了一起严重的电脑泄密事件&#xff0c;导致大量客户资料和内部战略规划被泄露。 经过…

网工每日一练(1月25日)

【说明】 某仓储企业网络拓扑结构如图1-1所示&#xff0c;该企业占地500亩。有五层办公楼1栋&#xff0c;大型仓库10栋。每栋仓库内、外部配置视频监控16台&#xff0c;共计安装视频监控160台&#xff0c;SwitchA、服务器、防火墙、管理机、RouterA等设备部署在企业办公楼一层的…

【C++入门到精通】智能指针 shared_ptr循环引用 | weak_ptr 简介及C++模拟实现 [ C++入门 ]

阅读导航 引言一、std::shared_ptr的循环引用1. 概念2. 示例分析 二、std::weak_ptr1. 简介2. weak_ptr模板类提供的成员方法3. 使用示例&#xff08;1&#xff09;weak_ptr指针的创建&#xff08;2&#xff09;完整示例&#xff08;解决上面循环引用问题&#xff09; 4. C模拟…

如何使用Flutter构建高质量的用户界面

Flutter 是一种比较流行的移动应用开发框架&#xff0c;可以让开发者使用一个代码库构建高质量的 iOS 和 Android 应用。Flutter 以其快速、美观、高度可定制等优点吸引了开发社区的广泛关注。但如何使用 Flutter 构建高质量的用户界面呢&#xff1f;下面分为以下几个部分简单的…

Matlab图像处理——谷物颗粒计数

针对目前谷物人工计数和光电计数方法存在的不足 , 提出了一种基于 Matlab 图像识别和处理技术的谷物计数方法 , 并用实例验证了其可靠性。该方法减轻了操作者劳动强度 , 弥补了人视觉的不足之处 , 提高了效率及准确率 , 为今后进一步研究奠定了必要的理论与实践基础 , 对完善“…

HarmonyOS鸿蒙应用开发 (二、应用程序包结构理解及Ability的跳转,与Android的对比)

在进行应用开发前&#xff0c;对程序的目录及包结构的理解是有必要的。如果之前有过android开发经验的&#xff0c;会发现OpenHarmony的应用开发也很简单&#xff0c;有很多概念是相似的。下面对比android分析总结下鸿蒙的应用程序包结构&#xff0c;以及鸿蒙对比android的诸多…

armv8 - GIC-V2 中断控制器

GIC起源 上一节中&#xff0c;粗略讲了hylicos上用的armv7上的一个通用中断控制器&#xff0c;其只支持60个中断源。但现代SoC上&#xff0c;中断系统正变得越来越复杂&#xff0c;旧的中断控制器已经无法胜任这些系统&#xff0c;主要体现在以下几点上&#xff1a; 中断源越…

《WebKit 技术内幕》学习之六(1): CSS解释器和样式布局

《WebKit 技术内幕》之六&#xff08;1&#xff09;&#xff1a;CSS解释器和样式布局 CSS解释器和规则匹配处于DOM树建立之后&#xff0c;RenderObject树之前&#xff0c;CSS解释器解释后的结果会保存起来&#xff0c;然后RenderObject树基于该结果来进行规范匹配和布局计算。当…

小程序发劵插件sendCoupon的使用

发劵插件官方文档 我目前的需求是&#xff0c;商家自定义满减劵、优惠劵&#xff0c;点击添加按钮可以添加到自己的卡包。 一开始后台了我发劵插件send-coupon文档&#xff0c;我想要用插件&#xff0c;又占空间&#xff0c;感觉又麻烦&#xff0c;不是有个wx.addCard嘛。非常…

HCIA-HarmonyOS设备开发认证-1.HarmonyOS简介

目录 前言目标一、HarmonyOS简介1.1、初识HarmonyOS1.2、HarmonyOS典型应用场景 二、HarmonyOS架构与安全2.1、HarmonyOS架构2.1.1 内核层2.1.2 系统服务层2.1.3 框架层2.1.4 应用层 2.2、HarmonyOS安全 3、HarmonyOS关键特性4、HarmonyOS生态5、思考题坚持就有收获 前言 本章…

Qt基础-窗体状态栏右下角的三角框如何去掉

Qt窗体状态栏右下角默认是有的三角框&#xff0c;在项目设计时不需要&#xff0c;如何去掉呢&#xff1f; 默认的窗体界面如下 选中状态栏&#xff0c;修改属性SizeGripEnabled勾选去掉 再次运行&#xff0c;三角框去掉了

java steam 的使用

说steam 前看下kotlin的一个写法如果用java怎么写 fun main() {// 创建一个列表val fruits listOf("Apple", "Banana", "Cherry", "Date", "Elderberry")// 使用 Sequence 进行过滤和映射操作val uppercaseFruitLengths …

怎么用图片生成二维码?扫描二维码看图片怎么制作?

现在将多张图片放到二维码中&#xff0c;通过扫码的方式预览是现在很常见的一种方式&#xff0c;那么如何生成图片、照片的二维码呢&#xff1f;对于图片二维码制作感兴趣的小伙伴&#xff0c;可以跟着小编来学习下面的制作技巧&#xff0c;借助网上的二维码生成器工具的功能&a…

基于LLaMA Factory,单卡3小时训练专属大模型 Agent

大家好&#xff0c;今天给大家带来一篇 Agent 微调实战文章 Agent&#xff08;智能体&#xff09;是当今 LLM&#xff08;大模型&#xff09;应用的热门话题 [1]&#xff0c;通过任务分解&#xff08;task planning&#xff09;、工具调用&#xff08;tool using&#xff09;和…

还在纠结怎么选随身WiFi的,看看这个!随身WiFi靠谱榜第一名推荐!哪个随身WiFi最好用

你是不是还在头疼如何挑选一个靠谱好用的随身WiFi呢&#xff1f;市场上的随身WiFi产品五花八门&#xff0c;每次购买随身WiFi都会被坑&#xff0c;差点就失去购买的信心了~别灰心&#xff0c;一篇文章教你如何挑选一个靠谱好用的随身WiFi&#xff01; 一、5大购买原则&#xff…

蓝桥杯备战——1.点亮LED灯

1.解析原理图 由上图可以看到8个共阳LED灯接到了573输出口&#xff0c;而573输入接到单片机P0口上。当573 LE脚输入高电平时&#xff0c;输出随输入变化&#xff0c;当LE为低电平时&#xff0c;输出锁存。 由上图可以看到Y4C接到了或非门74HC02的输出端&#xff0c;而输入端为…