【Python】os模块,windows中文件排序和os获取的数据排序

目标:获取多层文件夹中每个文件的文件名,排列顺序要按照windows的排列顺序来;

问题:目前通过两种方式获得的名称都不是按照Windows文件夹排序的,查了一下这个是按照ASCII码的排列顺序来的;

先记录一下如何获取文件名:

方法一:新建一个TXT,然后里面写一行 dir/a/s/b>LIST.TXT,把txt的后缀名改成bat,运行一下即可

方法二:直接传入到Excel pqquery 里,从新建查询——从文本——文件夹,这里直接把扩展名单列出来了,方便后续筛选;

 

方法三:通过Python的os

初步都试了一下,发现拿到的数据都不是按照Windows默认的排序,查了一下,目前发现Python的有一个库natsort可以用来排序

 

import os
from natsort import ns, natsorted
dir1 = r'D:\工作表\工作文件\19任务十九:合同\新建文件夹 (2)\资管长单1'
list1 = os.listdir(dir1)
#把第二层文件夹按照自然顺序排序
list2 = natsorted(list1,alg=ns.PATH)
fp = open(r'D:\test\pth13.csv','a',encoding = 'utf-8')
# 把第二层文件夹拼接成链接,并且放入list5
list5 = []
for t in list2:
    pth1 = os.path.join(dir1,t)
    list5.append(pth1)
#     list4用来放最终的文件名
list4 = []

# 遍历list5
for n in list5:
#     print(n)
    for root,dirs,files in os.walk(n):
#         list3用来放第二层文件夹中的文件名
        list3 = []
        for file in files:
            pth = os.path.join(n,file)
            list3.append(pth)
        list3 = natsorted(list3,alg=ns.PATH)
        list4.append(list3)
# print(list4)
# 写入csv
for ft in list4:
    for it in ft:
        it = it+'\n'
#         print(it)
        fp.write(it)
fp.close()
print('finish')

改良版

注意下os.path.isdir(path) 和os.path.isfile(path) 判断文件的类型

import os
from natsort import ns,natsorted
def get_path(dir_pth):   
    for root,dirs,files in os.walk(dir_pth):
#         把文件夹名称也放进去,这样后续看的更清楚
        list_name = []
        list_name.append(dir_pth)
        for file in files:
            fil_name = os.path.join(dir_pth,file)
            list_name.append(fil_name)
        list_name = natsorted(list_name,alg=ns.PATH)
        return list_name         
if __name__ == "__main__":
#     第一层文件夹链接
    fir_dir = r'D:\工作表\工作文件\19任务十九:合同\新建文件夹 (2)\资管长单1'
    fp = open(r'D:\test\pth14.csv','a',encoding = 'utf-8')
    dir_list =os.listdir(fir_dir)
#   #把第二层文件夹名称按照自然顺序排序  
    dir_list =natsorted(dir_list,alg=ns.PATH)
#     把第二层文件夹拼接成链接,然后放入sec_list中
    sec_list = []
    for i in dir_list:
        sec_pth = os.path.join(fir_dir,i)
        sec_list.append(sec_pth)
#     print(sec_list)
    final_list = []
    for t in sec_list:
#         判断是文件夹的话
        if os.path.isdir(t):
            dir_pth = t
#         print(t)
            list5 = get_path(dir_pth)
#             print(list5)
        final_list.append(list5)
    print(final_list)
    for ft in final_list:
        for nt in ft:
            it = nt+'\n'
            fp.write(it)
    fp.close()
    print('finish!')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值