Python listdir(folder)函数打印错误的文件顺序
在我的文件夹中,我的文件顺序如下。但是,当我使用以下代码将文件打印到python中时:Python listdir(folder)函数打印错误的文件顺序,python,Python,在我的文件夹中,我的文件顺序如下。但是,当我使用以下代码将文件打印到python中时: for i in os.listdir(folder): print(i) 我得到以下输出: spam2.txt spam304.txt spam33000.txt spam34.txt spam4.txt 这显然不符合正确的顺序,因为您可以看到数值以错误的方式混淆 我的问题是: 函数os.listdir是否让python以这种方式打印,是否有办法避免这种情况 我试图得到的结果是: spam2.t
for i in os.listdir(folder):
print(i)
我得到以下输出:
spam2.txt
spam304.txt
spam33000.txt
spam34.txt
spam4.txt
这显然不符合正确的顺序,因为您可以看到数值以错误的方式混淆
我的问题是:
函数os.listdir
是否让python以这种方式打印,是否有办法避免这种情况
我试图得到的结果是:
spam2.txt
spam4.txt
spam34.txt
spam304.txt
spam3044.txt
spam33000.txt
如果对我的问题有任何批评,请将其贴在下面,如果有,我愿意修改我的问题 来自:
返回包含目录中条目名称的列表
由路径给出。列表按任意顺序排列,不包括
特殊条目“.”和“…”即使它们出现在
目录
要按数字获取订单,您可以使用例如regex模式:
import re
import os
files = os.listdir('data')
re_pattern = re.compile('.+?(\d+)\.([a-zA-Z0-9+])')
files_ordered = sorted(files, key=lambda x: int(re_pattern.match(x).groups()[0]))
输出
[1]中的:文件
输出[1]:['spam2.txt','spam3.txt','spam304.txt','spam3300.txt','spam34.txt']
在[2]中:按顺序排列的文件
输出[2]:['spam2.txt','spam3.txt','spam34.txt','spam304.txt','spam3300.txt']
简要说明:
- 接受可用于对列表排序的
参数。这里我们读取文件名中点之前的数字。注意:您必须确保正则表达式模式与所有文件匹配键
开头匹配任何内容,但不贪婪(将尽可能少地匹配)+?
将匹配并捕获数字,只要有,您就可以从(\d+)
读取这些数字.groups()[0]
将匹配文件名中的点\。
将匹配文件扩展名(字母数字)([a-zA-Z0-9]+)
import os
folder ="1"
for i in sorted(os.listdir(folder), key=len):
print(i)
对
os.listdir
输出进行排序。从文档“返回一个列表,其中包含路径给定的目录中的条目名称。列表的顺序是任意的”谢谢!这实际上是我所寻找的,按长度精确排序不会使排序像OP的问题一般。想想spameg1.txt
和spam99.txt
。