在python中按数字顺序排序文件名

2024-10-01 13:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好。我最近在学习python。在

我在按数字顺序排序文件时遇到问题。我把文件按顺序排列在列表中:

["1card.txt", "card.txt" , "3card.txt", "52card.txt", "badcard.txt"]

当我简单地打印列表时,它不会按顺序打印,而是打印:1card.txt, 10card.txt等等。那么我如何修复以下代码?在

^{pr2}$

Tags: 文件代码txt列表排序顺序数字card
3条回答

怎么样:

import re

def tryint(s):
    try:
        return int(s)
    except ValueError:
        return s

def alphanum_key(s):
    return [tryint(c) for c in re.split('([0-9]+)', s)]

def sort_nicely(l):
    return sorted(l, key=alphanum_key)

然后你可以:

^{pr2}$

没有正则表达式的简单解决方案可以是:

def sort_int(examp):
    pos = 1
    while examp[:pos].isdigit():
        pos += 1
    return examp[:pos-1] if pos > 1 else examp

sorted(files, key=sort_int)

['1card.txt', '3card.txt', '52card.txt', 'badcard.txt', 'card.txt']

files = ["1card.txt", "card.txt" , "3card.txt", "52card.txt", "badcard.txt"]

def nat_sort(s):
    '''
    provides a sort mechanism for strings that may or 
    may not lead with an integer
    '''
    for i, c in enumerate(s):
        if not c.isdigit():
            break
    if not i:
        return 0, s
    else:
        return int(s[:i]), s[i:]

files.sort(key=nat_sort)

现在files是一个排序列表:

^{pr2}$

要将相似的字母排列在一起,请按上述方法进行操作:

def nat_sort(s):
    '''
    provides a sort mechanism for strings that may or 
    may not lead with an integer, but groups by strings 
    starting after integers, if any
    '''
    for i, c in enumerate(s):
        if not c.isdigit():
            break
    if not i:
        return s, 0
    else:
        return  s[i:], int(s[:i])

files.sort(key=nat_sort)

现在文件返回:

^{pr2}$

相关问题 更多 >