我有一个文件列表:
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
Run Code Online (Sandbox Code Playgroud)
当我使用
import glob
PATH = "C:\testfoo"
listing = glob.glob(os.path.join(PATH, '*.txt'))
Run Code Online (Sandbox Code Playgroud)
我有这个订单
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
.........
Run Code Online (Sandbox Code Playgroud)
我也试过sorted(glob.glob(os.path.join(PATH, '*.txt')))但没有解决我的问题,因为我希望有正确的序列.在foo_09.txt之后我想导入foo_10.txt而不是foo_100.txt等等.
tob*_*s_k 13
您可以使用特殊key功能进行排序.
sorted(files, key=lambda name: int(name[4:-4]))
Run Code Online (Sandbox Code Playgroud)
这样做,它需要文件名,例如foo_100.txt,去除前4个和后4个字符,将其余字符转换为a int,然后按这些值排序.
当然,这仅在所有文件具有相同的前缀和扩展名时才有效,并且您可能必须对其他文件名使用不同的数字.或者,您可以使用split字符串或正则表达式的方法来提取键函数中的数字部分.