web-dev-qa-db-ja.com

Pythonでディレクトリの内容を一覧表示するにはどうすればよいですか?

難しいことはできませんが、私は精神障害を抱えています。

154
Paul D. Waite
import os
os.listdir("path") # returns list
222
user85461

一方通行:

import os
os.listdir("/home/username/www/")

別の方法

glob.glob("/home/username/www/*")

ここにある例

上記のglob.globメソッドは、隠しファイルをリストしません。

私が数年前にこの質問に最初に答えたので、 pathlib がPythonに追加されました。現在、ディレクトリをリストする私の好ましい方法は、通常iterdirオブジェクトのPathメソッドを含んでいます:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")
46
Trey Hunner

os.walkは、再帰が必要な場合に使用できます。

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)
34
Mark Tolonen

glob.globまたはos.listdirが実行します。

18
Tuomas Pelkonen

os module はすべてのものを処理します。

os.listdir(path)

Pathで指定されたディレクトリ内のエントリの名前を含むリストを返します。リストは任意の順序です。特別なエントリ「。」は含まれません。ディレクトリに存在する場合でも、「..」。

可用性:Unix、Windows。

13
zdav

Python 3.4+では、新しい pathlib パッケージを使用できます。

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()はイテレータを返します。イテレータはlistに簡単に変換できます。

contents = list(Path('.').iterdir())
3
jpyams

Python 3.5以降では、os.scandirを使用できます。

違いは、名前ではなくファイルentriesを返すことです。 Windowsなどの一部のOSでは、os.path.isdir/fileがファイルかどうかを知る必要がなく、Windowsでディレクトリをスキャンするときにstatがすでに実行されているため、CPU時間を節約できます。

ディレクトリをリストし、max_valueバイトより大きいファイルを印刷する例:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(私のパフォーマンスに関する広範な回答をお読みください here

以下のコードは、ディレクトリとディレクトリ内のファイルをリストします。もう1つはos.walkです

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)