2016-07-05 12 views
0

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'] 
+2

特定の並べ替えが必要な場合は、それに応じて並べ替えます。私は特定の注文を与えるOSに決して依存しません。 – Fildor

+0

注文はインタフェース契約の一部ではありません。特定の発注に頼っている場合、契約ではなく実装の詳細に対してプログラミングしています。プログラミング言語にかかわらず、そうしないでください。 – IInspectable

+1

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

答えて

2

ストレートdocumentationos.listdirから:

リストは任意の順序であり、特別なエントリ '。'は含まれません。ディレクトリに存在していても '..'と表示されます。

+0

__arbitrary__とは何ですか?これはどういうわけかハッシングに関連していますか? –

+0

@ Ev.Kounisはおそらく、OSが提供しているもの(ファイルシステムが大文字小文字を区別するかどうかなどを含む)に関連しています; Pythonはそれを並べ替えません。 – jonrsharpe

関連する問題