python章节拆分_Python实现拆分多级目录的方式

1 环境

操作系统:Windows10

Python版本:Python3.7

2 简介

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

假设现有的目录结构如下: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

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

3 实现原理

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

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

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

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

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+100

'''''' ''''''

100.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+1~ 1*1000000+1000*1000+1000

1.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+1000

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

4 代码实现

测试数据:["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"]

# 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 ==> 1*1000+1 ~ 1*1000+100

2.1 ~ 2.100 ==> 2*1000+1 ~ 2*1000+100

'''

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 ==> 1*1000000+1*1000+1 ~ 1*1000000+1*1000+100

1.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+1000

'''

def judge_three_directory(get_num):

ret_str = None

for 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_str

return 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+100

''''''

''''''

100.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

'''

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+1

get_num = int(num_list[0]) * 1000 + int(num_list[1])

dir_tmp = judge_second_directory(get_num)

if dir_tmp == None:

continue

if 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_list

elif len(num_list) == 3: # 三级目录

# 例:1.1.100 ==> 1*1000000+1*1000+100

get_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:

continue

if 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_list

else:

logging.error("这是一个超过三级目录的条目!!!!")

logging.error("num: %s" % directory_item)

return [parent_directory, second_directory, three_directory]

if __name__ == '__main__':

original_data = ["", "", "2.1", "2.2", "2.3", "2.4", "", "", "", "", "6.1", "6.1.1", "6.1.2", "6.1.3", "6.1.4", "6.2", "6.3", "6.4", "", "", "", ""]

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)

运行测试:

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

Python之拆分目录

成分目录的好习惯,使得代码保持整洁,为以后的代码管理提供方便. 一.概念 一般目录有以下几个: bin:程序入口,存放start文件. conf:存放固定的配置信息,比如:连接redis的配置信息.连 ...

洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统

相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...

python 一次创建多级目录

python 一次创建多级目录沙漠骆驼:qq音乐import osos.mkdirs('/home/user/app')

python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures

1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

Python 按当前日期(年、月、日)创建多级目录的方法

先看实际效果,现在时间2018.4.26 使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代码如下: #!/usr/bin/env python #c ...

Linux杂谈&colon; 树形显示多级目录--tree

最近写博客的时候偶尔会需要将文件目录结构直观地列出来,例如python的包结构. 于是在网上搜了搜,发现了一个Linux下还不错的工具--tree tree 可以很直观地显示多级目录结构. 1. 安装 ...

python文件操作【目录大全】

总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

&lbrack;转帖&rsqb;Linux杂谈&colon; 树形显示多级目录--tree

Linux杂谈: 树形显示多级目录--tree https://www.cnblogs.com/tp1226/p/8456539.html tree -L 最近写博客的时候偶尔会需要将文件目录结构直观 ...

PHP判断文件夹是否存在和创建文件夹的方法(递归创建多级目录)

在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其实不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段 ...

随机推荐

leetcode 100&period; Same Tree

Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

mongochef如何链接有权限的mongodb3&period;x数据库

废话不多说,直接上图: 1.打开mongochef 2.打开的界面是这样的: 3.点击connect,上图红色框中的按钮,不要点下拉三角 4.点击New Connection按钮 5.1:上图标注1, ...

【JAVA线程间通信技术】

之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了 ...

&lbrack;改善Java代码&rsqb;避免带有变长参数的方法重载

建议4: 避免带有变长参数的方法重载 在项目和系统的开发中,为了提高方法的灵活度和可复用性,我们经常要传递不确定数量的参数到方法中,在Java 5之前常用的设计技巧就是把形参定义成Collection ...

Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

写一份简单的webpack2 的配置文件,无比简单

这是一份自己用到的webpack2的配置写法,从看webpack2开始,发现自己越来越懒了,现在html文件都不想自己写了,直接自己生成... 哈哈,这次是可以无比完美的导入css啦 开发的时候在命令 ...

洛谷4718【模板】Pollard-Rho算法

传送门 Description: 给定T个数,分别求出它们的最大质因数 Solution: 其实大概框架是很容易想到的 对于一个数n 找到它的一个因数x 判断这个因数是不是质数 如果是质数就更新答案 ...

MYSQL 解决中文字符集乱码问题的方法

修改 /etc/mysql/my.cnf 增加内容 [client] default-character-set = utf8mb4 [mysql] default-character-set = u ...

&lpar;转&rpar;CTP&colon; 平昨仓与平今仓,log轻轻告诉你&period;&period;&period;&period;&period;&period;&period;

转自:http://blog.csdn.net/wowotuo/article/details/43242663 CTP的相关文档告诉我们,中金所和三大商品交易所中,只有上期所区分平今仓和平昨仓.也就 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值