Python 3.4がディレクトリ内のファイルをリストする順序は、スクリプトが実行されるOSによって異なります。私は 'os'パッケージを使ってディレクトリにファイルをリストするスクリプトを持っています。リストの順序は、Windows 10またはUbuntu 14.04 LTSでスクリプトを実行するかどうかによって異なります。 Windows 10では、ファイルの作成日と思われますが、Ubuntuがファイルをどのようにリストしているかわかりません。なぜこのようなことが起きるのか、それを避ける方法は?ディレクトリ内のリストされたファイルの順序がWindowsと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に決して依存しません。 – Fildor
注文はインタフェース契約の一部ではありません。特定の発注に頼っている場合、契約ではなく実装の詳細に対してプログラミングしています。プログラミング言語にかかわらず、そうしないでください。 – IInspectable
Windowsでのリストの順序は、ファイルシステムによって異なります。 ['NtQueryDirectoryFile'](https://msdn.microsoft.com/en-us/library/ff567047)システムコールは、[' IRP_MJ_DIRECTORY_CONTROL': 'IRP_MN_QUERY_DIRECTORY']を作成します(https://msdn.microsoft.com/en/ -us/library/ff548658)フィルタドライバを含むファイルシステムデバイススタックによって処理されるI/Oリクエストパケット。 NTFSディレクトリは '$ I30'という名前の' $ INDEX_ALLOCATION' Bツリー属性に名前でソートされたファイルを格納します。実際には、NTFSディレクトリを一覧表示するときにこの属性を明示的に使用できます。 'os.listdir( 'C:\\:$ I30:$ INDEX_ALLOCATION')'。 – eryksun