我有一个文件列表:
foo_00.txt
foo_01.txt
foo_02.txt
foo_03.txt
foo_04.txt
foo_05.txt
foo_06.txt
foo_07.txt
foo_08.txt
foo_09.txt
foo_10.txt
foo_11.txt
.........
.........
foo_100.txt
foo_101.txt
当我使用
时import glob
PATH = "C:\testfoo"
listing = glob.glob(os.path.join(PATH, '*.txt'))
我有这个订单
foo_00.txt
foo_01.txt
foo_02.txt
foo_03.txt
foo_04.txt
foo_05.txt
foo_06.txt
foo_07.txt
foo_08.txt
foo_09.txt
foo_100.txt
foo_101.txt
.........
.........
foo_10.txt
foo_11.txt
.........
我也试过了sorted(glob.glob(os.path.join(PATH, '*.txt')))
,但没有解决我的问题,因为我希望得到正确的序列。在foo_09.txt之后我想导入foo_10.txt而不是foo_100.txt等等。
答案 0 :(得分:10)
您可以使用特殊的key
功能进行排序。
sorted(files, key=lambda name: int(name[4:-4]))
这是做什么的,它需要文件名,例如foo_100.txt
,删除前4个和后4个字符,将其余字符转换为int
,然后按这些值排序。
当然,这仅在所有文件具有相同的前缀和扩展名时才有效,并且您可能必须为其他文件名使用不同的数字。或者,您可以使用字符串的split
方法或正则表达式来提取键函数中的数字部分。