在 Python 中对文件名按照数值排序
对数据集的文件名正确排序
有些训练或评估程序要求数据集输入文件的顺序严格有序 1,但是文件名长度又不同,不能简单按照字典序来排序。比如,数据集的标签文件名可能是 0.txt、1.txt……10.txt 等,能想到的一个方法是在前面填充字符 '0'
。
lst = os.listdir(directory)
lst = sorted(lst, key=lambda s : s.zfill(50))
如果先去掉后缀名,然后再把前面的字符串转数字,则可能会遇到很多复杂的情况(比如多重后缀名),比不上在前面填充字符简单。
用 zfill
填充好之后,文件名都是这样的:
00000...001.txt
00000...002.txt
...
00000...100.txt
这样直接按照字典序排序就可以了。
其他和填充相关的格式化方法
Python 中用来填充的方法还是挺多的,比如 rjust()
、ljust()
、center()
方法分别是向右对齐、向左对齐、居中对齐,还能自己选择用来对齐的字符(默认是空格)。因此,rjust()
实际上是 zfill()
功能的超集。
Tip
Python 中没有字符类型,只有字符串,所以字符其实是长度为 1 的字符串。
除了这三个函数之外,使用 f-string 也能完成字符串的对齐,比如:
>>> f'{"A":<16}'
'A '
>>> f'{"A":-<16}'
'A---------------'
>>> f'{"A":-^16}'
'-------A--------'
>>> f'{"A":->16}'
'---------------A
最好避免这一做法。但是很多时候时间仓促,又或者接手的代码就是这样,只能临时修补一下。 ↩︎