使用Python按文件名中的数字大小排序

❤️️💚💙💛🧡💜🖤🤍🧡

大家好!我是曾续缘🥰

欢迎关注💕

❤️点赞 👍 收藏 ⭐再看,养成习惯

🔥📚

在实际开发中,经常需要对一些文件名、文件路径等进行排序,这就需要使用到自然排序。自然排序是一种将字符串中的数字按照数值大小排序的方式,而不是按照字符串顺序排序。例如,在使用字母排序时,排序结果为 ['file1.txt', 'file10.txt', 'file2.txt'] ,但使用自然排序时,排序结果为 ['file1.txt', 'file2.txt', 'file10.txt'] ,更符合直觉。

Python中的sorted函数可以对一个列表进行排序,其默认的排序方式是按照字符的Unicode编码大小进行排序。如果要对数字进行排序,需要自定义排序方式。对于需要进行自然排序的字符串,可以编写一个自定义的排序函数 natural_sort_key ,并将其作为 sorted 函数的排序关键字参数 key 进行传递。

下面是natural_sort_key函数的实现代码:

import re

def natural_sort_key(s):
    """
    按文件名的结构排序,即依次比较文件名的非数字和数字部分
    """
    # 将字符串按照数字和非数字部分分割,返回分割后的子串列表
    sub_strings = re.split(r'(\d+)', s)
    # 如果当前子串由数字组成,则将它转换为整数;否则返回原始子串
    sub_strings = [int(c) if c.isdigit() else c for c in sub_strings]
    # 根据分割后的子串列表以及上述函数的返回值,创建一个新的列表
    # 按照数字部分从小到大排序,然后按照非数字部分的字典序排序
    return sub_strings

natural_sort_key函数中,首先使用正则表达式将字符串按照数字和非数字部分进行分割,得到一个子串列表。然后对于每个子串,如果它由数字组成,则将其转换为整数;否则返回原始子串。最后返回经过处理后的子串列表,这样就完成了自然排序。

下面是如何在Python中使用sorted函数和自定义的natural_sort_key函数对文件名进行自然排序:

import os

# 要进行排序的文件名列表
file_list = ['file11.txt', 'file2.txt', 'file10.txt', 'file3.txt']

# 对文件名列表进行自然排序
sorted_file_list = sorted(file_list, key=natural_sort_key)

# 打印排序结果
print(sorted_file_list)

运行程序,输出结果为:

['file2.txt', 'file3.txt', 'file10.txt', 'file11.txt']

可以看到,文件名已经按照数字从小到大排序。使用sorted函数和natural_sort_key函数结合起来,可以快速、准确地实现对文件名列表的自然排序。

如果只需要按数字部分进行排序,而不关注非数字部分的字典序排序,可以简单修改natural_sort_key函数。具体来说,对于非数字部分的子串,可以直接替换成空字符串,这样它们在排序时就会被忽略掉,只关注数字部分的大小。

下面是修改后的natural_sort_key函数的实现代码:

import re

def natural_sort_key(s):
    """
    按文件名中的自然数排序
    """
    # 将字符串按照数字和非数字部分分割,返回分割后的子串列表
    sub_strings = re.split(r'(\d+)', s)
    # 如果当前子串由数字组成,则将它转换为整数;否则将其替换成空字符串
    sub_strings = [int(c) if c.isdigit() else '' for c in sub_strings]
    # 返回子串列表
    return sub_strings

这种实现方式在某些情况下比较实用,例如对于一些文件名中混杂了许多非数字字符的情况。

以上就是在Python中实现文件名自然排序的方法,觉得有用的别忘了点赞哦。使用natural_sort_key函数,可以快速、准确地完成对文件名、文件路径等进行自然排序的需求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值