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"]

ContractedBlock.gif

ExpandedBlockStart.gif

1 #encoding: utf-8

2 importos3 importsys4 importlogging5

6 #设置logging.basicConfig()方法的参数和配置logging.basicConfig函数

7 FORMAT = '[%(funcName)s: %(lineno)d]: %(message)s'

8 LEVEL =logging.INFO9 logging.basicConfig(level = LEVEL, format=FORMAT)10

11

12 '''

13 * 获取二级标题所在目录名14 * 返回值:二级目录标题名15 目录与数值对应关系:16 1.1 ~ 1.100 ==> 1*1000+1 ~ 1*1000+10017 2.1 ~ 2.100 ==> 2*1000+1 ~ 2*1000+10018 '''

19 defjudge_second_directory(get_num):20 for i in range(1, 1001, 1):21 if get_num > i * 1000 and get_num < (i+1)*1000:22 return str(i) + ".1"

23 returnNone24

25

26 '''

27 * 获取三级标题所在目录名28 * 返回值:三级目录标题名29 目录与数值对应关系:30 1.1.1 ~ 1.1.100 ==> 1*1000000+1*1000+1 ~ 1*1000000+1*1000+10031 1.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+100032 '''

33 defjudge_three_directory(get_num):34 ret_str =None35 for i in range(1, 1001, 1):36 #判断二级标题

37 if get_num > i * 1000000 and get_num < (i+1)*1000000:38 ret_str = str(i) + "."

39 for j in range(1, 1001, 1):40 #判断三级标题

41 if get_num > i*1000000 + j*1000 and get_num < i*1000000 + (j+1)*1000:42 ret_str += str(j) + '.1'

43 returnret_str44 returnNone45

46

47 '''

48 按目录进行分类:49 分类原理:50 (1) 一级目录:51 1 ~ 1000 ==> 1 ~ 100052 一级目录所占的数字范围:1 ~ 100053 (2) 二级目录:54 1.1 ~ 1.100 ==> 1*1000+1 ~ 1*1000+10055 2.1 ~ 2.100 ==> 2*1000+1 ~ 2*1000+10056 ''''''

57 ''''''

58 100.1 ~ 100.100 ==> 100*1000+1 ~ 100*1000+10059 1000.1 ~ 1000.1000 ==> 1000*1000+1 ~ 1000*1000 + 100060 二级目录所占的数字范围:1000 ~ 100100061 (3) 三级目录:62 1.1.1 ~ 1.1.100 ==> 1*1000000+1*1000+1 ~ 1*1000000+1*1000+10063 1.1000.1 ~ 1.1000.1000 ==> 1*1000000+1000*1000+100064 1.2.1 ~ 1.2.1000 ==> 1*1000000+2*1000+1 ~ 1*1000000+2*1000+100065 '''

66 defdirctory_classify(directory_list):67 parent_directory =[]68 second_directory ={}69 three_directory ={}70 for directory_item indirectory_list:71 num_list = directory_item.split(".")72 #开始按目录进行分类

73 if len(num_list) == 1: #一级目录

74 parent_directory.append(directory_item)75 elif len(num_list) == 2: #二级目录

76 #例:1.1 ==> 1*1000+1

77 get_num = int(num_list[0]) * 1000 + int(num_list[1])78 dir_tmp =judge_second_directory(get_num)79 if dir_tmp ==None:80 continue

81 if dir_tmp not insecond_directory:82 second_directory[dir_tmp] =[directory_item]83 else:84 tmp_list =second_directory[dir_tmp]85 tmp_list.append(directory_item)86 second_directory[dir_tmp] =tmp_list87 elif len(num_list) == 3: #三级目录

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

89 get_num = int(num_list[0])*1000000 + int(num_list[1])*1000 + int(num_list[2])90 dir_tmp =judge_three_directory(get_num)91 if dir_tmp ==None:92 continue

93 if dir_tmp not inthree_directory:94 three_directory[dir_tmp] =[directory_item]95 else:96 tmp_list =three_directory[dir_tmp]97 tmp_list.append(directory_item)98 three_directory[dir_tmp] =tmp_list99 else:100 logging.error("这是一个超过三级目录的条目!!!!")101 logging.error("num: %s" %directory_item)102 return[parent_directory, second_directory, three_directory]103

104

105 if __name__ == '__main__':106 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"]107 directory =dirctory_classify(original_data)108

109 parent_directory =directory[0]110 second_directory = directory[1]111 three_directory = directory[2]112

113 print ("一级目录:", parent_directory)114 print ("二级目录:", second_directory)115 print ("三级目录:", three_directory)

View Code

运行测试:

1078885-20200916103043290-1766699443.png

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值