使用 glob 连续打印文件

printing the files serially using glob

我的目录中有文件。这些文件被命名为 1.txt,2.txt,...10.txt...150.txt.

当我使用 glob 函数时,它随机将文件排列为

1.txt,10.txt....so on

但是我希望文件像1.txt,2.txt...10.txt,11.txt...

一样按顺序排列

我试过这个功能

import glob
for filename in sorted(glob.glob('*.txt')):
    print(filename)

希望高手帮我解决这个问题

默认情况下,sorted 会将文件名排序为 字符串 。这会产生不需要的结果:

In [1]: names = [str(n)+".txt" for n in range(1,21)];

In [2]: ' '.join(sorted(names[4:14]))
Out[2]: '10.txt 11.txt 12.txt 13.txt 14.txt 5.txt 6.txt 7.txt 8.txt 9.txt'

您想按数字对文件名进行排序。在这种情况下,可以使用将文件名转换为整数的特殊 key 函数来完成。

在上面的例子中,像这样:

In [3]: ' '.join(sorted(names[4:14], key=lambda s: int(s[:-4])))
Out[3]: '5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt 13.txt 14.txt'

或者在您的代码中:

import glob
for filename in sorted(glob.glob('*.txt'), key=lambda s: int(s[:-4])):
    print(filename)