代码之家  ›  专栏  ›  技术社区  ›  Simplicity

与其他字符混合时按数字顺序对文件名排序

  •  1
  • Simplicity  · 技术社区  · 6 年前

    我有以下代码部分,我打算按正确的顺序打印文件名:

    for root, dirs, files in os.walk(path):
        sortedFiles = sorted(files)
        for file in sortedFiles[0:]:
            print file
    

    这就是我得到的:

    1.i.jpg
    10.i.jpg
    102.i.jpg
    103.i.jpg
    104.i.jpg
    105.i.jpg
    106.i.jpg
    107.i.jpg
    108.i.jpg
    109.i.jpg
    11.i.jpg
    ...
    ...
    ...
    

    我怎么能拥有 2.i.jpg 后出现 1.i.jpg 等等?也就是说,按数值顺序排列正确吗?

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Chris    6 年前

    你可以整理一下 key :

    files = ['1.i.jpg',
    '10.i.jpg',
    '102.i.jpg',
    '103.i.jpg',
    '104.i.jpg',
    '105.i.jpg',
    '106.i.jpg',
    '107.i.jpg',
    '108.i.jpg',
    '109.i.jpg',
    '11.i.jpg',
    '2.i.jpg']
    
    sorted(files, key=lambda x:int(x.split('.')[0]))
    ['1.i.jpg',
     '2.i.jpg',
     '10.i.jpg',
     '11.i.jpg',
     '102.i.jpg',
     '103.i.jpg',
     '104.i.jpg',
     '105.i.jpg',
     '106.i.jpg',
     '107.i.jpg',
     '108.i.jpg',
     '109.i.jpg']
    
        2
  •  1
  •   Patriots299    6 年前

    这是另一种选择。但这并不像克里斯所建议的那样简单。

    files = ['1.i.jpg',
    '10.i.jpg',
    '102.i.jpg',
    '103.i.jpg',
    '104.i.jpg',
    '105.i.jpg',
    '106.i.jpg',
    '107.i.jpg',
    '108.i.jpg',
    '109.i.jpg',
    '11.i.jpg',
    '2.i.jpg']
    
    numbers = []
    for file in files:
        x = file.split('.')[0]
        numbers.append(x)
    
    files.clear()
    
    for i in sorted(numbers, key=int):
        y = i + ".i.jpg"
        files.append(y)
    
    print(files)
    

    印刷品:

    ['1.i.jpg', '2.i.jpg', '10.i.jpg', '11.i.jpg', '102.i.jpg', '103.i.jpg', '104.i.jpg', '105.i.jpg', '106.i.jpg', '107.i.jpg', '108.i.jpg', '109.i.jpg']