os.listdir输出的文件名顺序是无序的吗?

源码解释

在这里插入图片描述
首先声明一下,本文也不确定。

看源码解释:

  1. 返回一个列表
  2. 输入可以是str或者pathlike 对象
  3. 如果没有输入,会输出当前目录的内容
  4. 在有些平台,路径会被作为源文件的指标(指针?)
  5. 返回的列表是无序状态,不会包含’.’, ’ . . '(linux系统路径会有)

更深的源码扒不到,就先不管了orz

做一个实验

在这里插入图片描述
这是文件夹,输出是:
在这里插入图片描述

显然是按照字符顺序的。

换一个文件夹

在这里插入图片描述
在这里插入图片描述
可以看出,输出顺序没有明显的规律,如果是一个个字符进行对比,1805以1开头,应该在0001前面。如果以字符串长短对比,最长的字符串只在第3位。

再看一个小实验

在这里插入图片描述

这个文件夹是从0到1769
输出结果是:
在这里插入图片描述

显然是先以第一个数字排序,先是0,再排以1开头的,1开头的数字里面先排0…
显然是有一定顺序的。

总结

是有一定顺序的,但无法胜任复杂的情况。
在最后一个应用场景下,我们可以给位数较低的文件改名,通过在数字前补充0的手段,让个位数、十位数、百位数变成千位数。
这样就转化为了场景1,输出列表是有顺序的。
在这里插入图片描述
比如,8,9前加一个0,可以和十位数进行对比。
补0算法可以用shutil库:

import os
import shutil
from fullerenedatapraser.io.recursion import recursion_files


root_path = r'I:\cages\one_to_full'
for item in recursion_files(root_path, format='xyz', ignore_mode=True):
    item = str(item)
    if item[-12] == '_':
        new_name = item[:-11] + '0' + item[-11:]
        shutil.move(item, f'{new_name}')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值