Python 为什么目录中列出的文件顺序在Windows和Ubuntu之间发生变化?

Python 为什么目录中列出的文件顺序在Windows和Ubuntu之间发生变化?,python,windows,ubuntu-14.04,Python,Windows,Ubuntu 14.04,我注意到,Python3.4在目录中列出文件的顺序因脚本执行的操作系统而异。我有一个使用“os”包列出目录中文件的脚本。列表的顺序取决于我是在Windows10还是在Ubuntu14.04LTS中运行脚本。对于Windows10,顺序似乎是文件的创建日期,但我不知道Ubuntu列出文件的依据是什么。你知道为什么会发生这种情况以及如何避免吗 我的脚本执行以下操作: import os my_path = 'my/directory/' files = os.listdir(my_path) Wi

我注意到,Python3.4在目录中列出文件的顺序因脚本执行的操作系统而异。我有一个使用“os”包列出目录中文件的脚本。列表的顺序取决于我是在Windows10还是在Ubuntu14.04LTS中运行脚本。对于Windows10,顺序似乎是文件的创建日期,但我不知道Ubuntu列出文件的依据是什么。你知道为什么会发生这种情况以及如何避免吗

我的脚本执行以下操作:

import os
my_path = 'my/directory/'
files = os.listdir(my_path)
Windows 10结果:

['my_file_2014', 'my_file_2015', 'my_file_2016']
Ubuntu 14.04结果:

['my_file_2014', 'my_file_2016', 'my_file_2015']

直接从
os.listdir

该列表按任意顺序排列,不包括特殊条目“.”和“..”,即使它们存在于目录中


直接从
os.listdir

该列表按任意顺序排列,不包括特殊条目“.”和“..”,即使它们存在于目录中


如果需要特定的排序,请相应地对列表进行排序。我永远不会依赖操作系统给我一个特定的订单。这个订单不是接口合同的一部分。如果您依赖于任何特定的排序,那么您是根据实现细节而不是合同进行编程的。不要这样做,不管编程语言如何。Windows上的列表顺序取决于文件系统。系统调用构建一个I/O请求数据包,该数据包由文件系统设备堆栈(包括过滤器驱动程序)处理。NTFS目录在名为
$I30
的B树属性中存储按名称排序的文件。在列出NTFS目录时,您实际上可以显式地使用此属性,例如,
os.listdir('C:\\:$I30:$INDEX\u ALLOCATION')
@eryksun:有人可以将此注释标记为“非建设性”,但我始终感谢您对文档化API契约下的操作的深入了解。以及如何将其用于上游。谢谢。@IInspectable,我想澄清一下,对于Windows上NTFS的常见情况,列表可能是按文件名排序的,而不是按创建日期排序的,但这取决于文件系统。关于
$INDEX_ALLOCATION
属性的
$I30
名称及其用法的部分可能被视为不具有建设性。Windows开发人员可能也不喜欢讨论系统调用,而不喜欢讨论高级
FindFirstFile
FindNextFile
API。我们假设NT执行官是一个神奇的黑匣子。如果你想要一个特定的排序,那么对列表进行相应的排序。我永远不会依赖操作系统给我一个特定的订单。这个订单不是接口合同的一部分。如果您依赖于任何特定的排序,那么您是根据实现细节而不是合同进行编程的。不要这样做,不管编程语言如何。Windows上的列表顺序取决于文件系统。系统调用构建一个I/O请求数据包,该数据包由文件系统设备堆栈(包括过滤器驱动程序)处理。NTFS目录在名为
$I30
的B树属性中存储按名称排序的文件。在列出NTFS目录时,您实际上可以显式地使用此属性,例如,
os.listdir('C:\\:$I30:$INDEX\u ALLOCATION')
@eryksun:有人可以将此注释标记为“非建设性”,但我始终感谢您对文档化API契约下的操作的深入了解。以及如何将其用于上游。谢谢。@IInspectable,我想澄清一下,对于Windows上NTFS的常见情况,列表可能是按文件名排序的,而不是按创建日期排序的,但这取决于文件系统。关于
$INDEX_ALLOCATION
属性的
$I30
名称及其用法的部分可能被视为不具有建设性。Windows开发人员可能也不喜欢讨论系统调用,而不喜欢讨论高级
FindFirstFile
FindNextFile
API。我们应该假装NT的执行官是一个神奇的黑匣子。但什么是武断的?这与哈希有关吗?@Ev.Kounis可能与操作系统提供的内容更相关(包括文件系统是否区分大小写等;Python只是不重新排序而已。但这是任意的吗?这与哈希有关吗?@Ev.Kounis可能与操作系统提供的内容更相关(包括文件系统是否区分大小写等;Python只是不重新排序。