使用 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)
我的目录中有文件。这些文件被命名为 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)