Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python listdir(folder)函数打印错误的文件顺序_Python - Fatal编程技术网

Python listdir(folder)函数打印错误的文件顺序

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

在我的文件夹中,我的文件顺序如下。但是,当我使用以下代码将文件打印到python中时:

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