【问题标题】:Python - Sort list of filepaths like WindowsPython - 对文件路径列表进行排序,如 Windows
【发布时间】:2015-08-14 07:04:48
【问题描述】:

我目前正在尝试在与 Windows 资源管理器相同的庄园中对字符串文件路径列表进行排序。我一直在查看已发布的几种自然/人类排序算法(尤其是 natsort 包中的算法),但它们都有相同的问题。

给定一个包含文件“0.jpg”、“00.jpg”和“000.jpg”的目录,Windows 将按照精度递减的顺序对它们进行排序,即:000.jpg、00.jpg。 0.jpg。

我尝试过的所有算法都会以相反的顺序对它们进行排序。我不确定如何获得所需的行为。任何意见,将不胜感激。

【问题讨论】:

  • 排序 => 反转? Windows 将根据您选择的任何方式进行排序,具体取决于该列是按升序还是降序排序...
  • 嘿,我不知道这可能会很晚,但我已经用 natsort 添加了一个答案,它可以完成这项工作

标签: python windows sorting filepath


【解决方案1】:

这应该可以,但是有点笨拙:

  • 确定列表中最长的文件名
  • 将所有文件名右填充到最长名称的长度,并在文件扩展名之前插入一个不出现在任何文件名中的高值字符(例如“~”)
  • 正常排序
  • 在显示结果之前删除插入的字符

所以

0.jpg, 00.jpg, 000.jpg, 1.jpg

变成:

0~~.jpg, 00~.jpg, 000.jpg, 1~~.jpg

排序时:

000.jpg, 00~.jpg, 0~~.jpg, 1~~.jpg

最后:

000.jpg, 00.jpg, 0.jpg, 1.jpg

【讨论】:

  • 我最终这样做了,但我没有使用“~”,而是使用了 chr(65535)。
  • 实际上,从头开始。我发现了用这种方法引入的另一个极端情况。
【解决方案2】:

natsort python 包实际上可以帮助您解决问题

from natsort import os_sorted
a = ["0.jpg","00.jpg","000.jpg"]
print(os_sorted(a))

输出:

['000.jpg', '00.jpg', '0.jpg']

【讨论】:

    猜你喜欢
    • 2019-04-25
    • 2011-08-06
    • 2011-12-25
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2018-04-17
    相关资源
    最近更新 更多