【问题标题】:Unsorting files in os.listdir()在 os.listdir() 中取消排序文件
【发布时间】:2020-09-18 03:13:09
【问题描述】:

os.listdir() 函数中,当我尝试获取我的文件时,它会自动对我的所有文件进行排序,而无需我提供任何排序​​函数。

有没有什么方法可以在没有排序的情况下获得默认输出?

【问题讨论】:

  • 您认为默认输出到底是什么?
  • 考虑到您认为的默认选项,您可以使用os.stat(对于os.listdir 中的每个文件)来获取大小、atime、ctime、mtime 等。然后进行相应的排序。是的,这是一个冗长的方法,但可能会得到你想要的。

标签: python python-3.x listdir


【解决方案1】:

documentation 说:

列表是任意顺序的

没有办法“取消排序”这个。在您的情况下似乎已排序是巧合,也可能不是。

在 CPython 的情况下,listdir 函数甚至没有在 os 模块本身中定义,它只是从 ntposix 模块转发相应的函数,具体取决于您是哪个操作系统使用。

作为示例,您可以在此处查看 POSIX 版本的源代码:

https://github.com/python/cpython/blob/5efb1a77e75648012f8b52960c8637fc296a5c6d/Modules/posixmodule.c#L3739

条目添加到结果列表的顺序是通过重复调用readdir函数来确定的,该函数也没有指定任何顺序:

连续调用读取文件名的顺序 readdir() 取决于文件系统的实现;不太可能 名称将以任何方式排序。


(我现在找不到 Windows 版本。)

【讨论】:

  • fwiw,ntposix 模块都来自posixmodule.c,所以它们都使用了那个实现——windows 实现就在那个之上。我还将您的链接更新为永久链接(在 github 上按 [y] 获取永久链接!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2022-11-21
  • 2014-01-11
相关资源
最近更新 更多