【发布时间】: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/…
-
如果您可以将其发布为答案我可以将其标记为已解决:)
-
通常的方法是将其作为副本关闭。我现在就给它投票,它可能会立即关闭。
-
我正在添加这个答案,问题被标记为重复。我认为这更简单:
sorted(filenames, key=lambda x: int(x.split('_')[1]))
标签: python sorting python-3.x file-io leading-zero