文件名(文件夹名) 排序: 按字符串排序、 按数字排序 Python

文件夹名 排序

如下图,获取Data路径下的文件夹名,并排序

具体实现如下:

 

import os


''' 获取 文件夹名 列表 '''
path1 = './Data/'
file_list = next(os.walk(path1))[1]


''' 文件夹名 排序 '''
# 文件夹名 按字符串排序
file_list.sort()
print(file_list)
# ['file1', 'file101', 'file102', 'file103', 'file11', 'file12',
# 'file13', 'file2', 'file21', 'file22', 'file23', 'file3']

# 文件夹名 按数字排序
file_list.sort(key=lambda x: int(x[4:]))
print(file_list)
# ['file1', 'file2', 'file3', 'file11', 'file12', 'file13',
# 'file21', 'file22', 'file23', 'file101', 'file102', 'file103']

 

文件名 排序

 

如下图,获取file1文件夹下的文件名,并排序

 

具体实现如下:

import os

''' 获取 文件名 列表 '''
path2 = './Data/file1/'
test_list = next(os.walk(path2))[2]

''' 文件名 排序 '''
# 文件名 按字符串排序
test_list.sort()
print(test_list)
# ['test001_1.txt', 'test001_101.txt', 'test001_102.txt', 'test001_103.txt', 'test001_11.txt',
# 'test001_12.txt', 'test001_13.txt', 'test001_2.txt', 'test001_21.txt', 'test001_22.txt',
# 'test001_23.txt', 'test001_3.txt', 'test001_31.txt', 'test001_32.txt', 'test001_33.txt']

# 文件名 按数字排序
test_list.sort(key=lambda x: int(x.split('_')[1][:-4]))
print(test_list)
# ['test001_1.txt', 'test001_2.txt', 'test001_3.txt', 'test001_11.txt', 'test001_12.txt',
# 'test001_13.txt', 'test001_21.txt', 'test001_22.txt', 'test001_23.txt', 'test001_31.txt',
# 'test001_32.txt', 'test001_33.txt', 'test001_101.txt', 'test001_102.txt', 'test001_103.txt']

 

附 1:

列表元素 逆序排序

list.reverse()   # 可直接在原来的列表里面将元素进行逆序排列,不需要创建新的副本用于存储结果。

按文件名字符串小写排序

list.sort(key=lambda x: x.lower())

按创建时间排序

list.sort(key=lambda x: os.path.getctime(x))  # 精确到秒

list.sort(key=lambda x: os.stat(x).st_ctime_ns)  # 精确到纳秒

附 2:

随机排序 列表/序列 元素

 

import random

list = …

random.shuffle(list)

 

 

 
 
 
  • 11
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,如果要对文件名进行排序,可以使用 Python 的 `sorted()` 函数。默认情况下,`sorted()` 函数按照 ASCII 码的顺序进行排序,这意味着数字会排在字母前面。如果需要按照数字、字母混合的顺序进行排序,则可以使用 `key` 参数来指定排序规则。 下面是修改后的代码: ```python import os # 设置要读取的文件夹路径 folder_path = '/path/to/folder' # 定义文件类型和对应的文件列表 file_types = {} # 遍历文件夹所有文件 for filename in os.listdir(folder_path): # 获取文件的完整路径 filepath = os.path.join(folder_path, filename) # 判断文件是否为普通文件 if os.path.isfile(filepath): # 获取文件扩展 file_extension = os.path.splitext(filename)[1].lower() # 将文件名添加到对应类型的列表 if file_extension in file_types: file_types[file_extension].append(filename) else: file_types[file_extension] = [filename] # 对每种类型的文件名列表进行排序 for file_extension in file_types: file_types[file_extension] = sorted(file_types[file_extension], key=lambda x: (int(''.join(filter(str.isdigit, x))), x)) # 打印每种类型的文件名列表 for file_extension in sorted(file_types.keys()): print(file_extension) for filename in file_types[file_extension]: print(" {}".format(filename)) ``` 在这个版本的代码,我在遍历完所有文件之后对每种类型的文件名列表进行了排序并且指定了排序规则。这里使用了一个 lambda 函数,首先提取文件名数字部分,然后将其转换为整数进行比较,如果文件名没有数字,则按照字母顺序进行比较。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值