【问题标题】:Python sorting numbered files missing leading zeros [duplicate]Python对缺少前导零的编号文件进行排序[重复]
【发布时间】:2015-03-04 20:20:45
【问题描述】:

我正在阅读一系列 .csv 文件,格式为:

ImageData_999.csv
ImageData_1000.csv

您可以看到数字按顺序增加,但它们没有前导零,因此当它们被读取时,我目前正在查看一个以这样结尾的列表:

ImageData_3259
ImageData_3289
ImageData_811
ImageData_907

这些文件的数量确实会跳动,因此如果这是最大的文件名,则不会有 3289 个文件,但我想对它们进行排序以便正确排序。那是下面的而不是上面的:

ImageData_811
ImageData_907
ImageData_3259
ImageData_3289

我在 python 中工作,目前只是从 os 模块中获取文件名,如下所示:

for root, dirs, files in os.walk(path):
    for file in fnmatch.filter(files, filter):
        yield os.path.join(root, file)

我已经尝试了几种方法来对由此产生的列表进行排序,但它们似乎都没有改变顺序。

【问题讨论】:

  • 这被称为“自然排序”,当然以前有人问过。这是一个:stackoverflow.com/questions/4836710/…
  • 这是我记得的那个:stackoverflow.com/questions/12184015/…
  • 如果您可以将其发布为答案我可以将其标记为已解决:)
  • 通常的方法是将其作为副本关闭。我现在就给它投票,它可能会立即关闭。
  • 我正在添加这个答案,问题被标记为重复。我认为这更简单:sorted(filenames, key=lambda x: int(x.split('_')[1]))

标签: python sorting python-3.x file-io leading-zero


【解决方案1】:

Mark Ransom 在此处发布的答案对我有用:

Does Python have a built in function for string natural sort?

【讨论】:

    【解决方案2】:

    所以你想按数字而不是按字典顺序对它们进行排序?

    文件名是否总是以相同的单词开头? “ImageData_”?

    如果是这样,我会去掉字母,然后将它们排序为数字。 (例如,对于他们每个人filename = re.sub(r'[^0-9]*', "", filename))。

    然后你可以将它们排序为像这样的数字 list1.sort(key=int) from How to sort a list numerically?

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多