リキッドジャンパー Python Python 3-os.scandirでディレクトリ内のファイルの一覧を取得する

Python 3-os.scandirでディレクトリ内のファイルの一覧を取得する

python_os-scandir_topimage


Pythonでディレクトリ内のファイル一覧を取得したい


プログラミングでディレクトリ・ファイルの操作は外せないテクニックの1つ。

逆に言えばディレクトリ・ファイルの扱い方を知らずにプログラミングをするのは困難とも言えます。

そして各プログラミング言語同様にPythonにもディレクトリ・ファイル操作を扱うための便利な機能が備わっています。

そこでこの記事では、PythonのOSモジュールの os.listdir() os.scandir() を使い、指定したディレクトリ内の一覧を取得する方法を紹介します。

ディレクトリ・ファイルの操作はプログラミングには欠かせないテクニックです。

os.listdir() os.scandir() の使い方の違いを含め紹介するので、是非参考にしてみてください。


■扱うテクニック

・os.listdir()でファイルの一覧を取得
・os.scandir()でファイルの一覧を取得
・ファイル名で取得、フルパスで取得
・ディレクトリ・ファイルを判定

Pythonでディレクトリ・ファイルの一覧を取得する

それではosモジュールで D:/liquidJumper のディレクトリ一覧を取得したいと思います。

Pythonでディレクトリ・ファイルの一覧を取得

osモジュールの機能

Pythonで指定したディレクトリ内の一覧を取得する場合は osモジュール  を使います。

osモジュールはファイルやパスの操作などOSに依存する機能に関わる操作をする場合に使用します。

■osモジュールの機能の一部

os.listdir()ファイルとディレクトリの一覧を取得
os.mkdir()ディレクトリの作成
os.getcwd()カレントディレクトリ(Pythonが実行されているディレクトリ)の取得
os.chdir()カレントディレクトリの変更
os.path.isfile()指定したパスがファイルなのかを判定する
os.path.isdir()指定したパスがディレクトリなのかを判定する

os.listdir()でディレクトリ内のファイルの一覧を取得

Pythonでディレクトリ内のファイル一覧を取得するには os.listdir() を使います。

最初にosモジュールをインポートし、os.listdir() にディレクトリのパスを指定。printで出力します。

import os 

dir_path = "D:/liquidJumper" 

print(os.listdir(dir_path))

結果:

os.listdir()でディレクトリ内の一覧を取得すると、指定したディレクトリ内のフォルダやファイルが配列で取得されます。

['javascript', 'new_textfile.txt', 'python', 'textfile_shift_jis.txt', 'textfile_utf8 - コピー.txt', 'textfile_utf8.txt', 'todofuken.xls', 'todofuken.xlsx', 'unity', 'wakayama.xls']


配列の中身を取り出すため、os.listdir()で指定したディレクトリ内の一覧を配列で受け取り、for文で順番に取り出し、print()で出力します。

import os

dir_path = "D:/liquidJumper"

for i in os.listdir(dir_path):
    print(i)


結果:

今度は、指定したディレクトリ内のフォルダやファイルが一覧で出力されました。

javascript
new_textfile.txt
python
textfile_shift_jis.txt
textfile_utf8 - コピー.txt
textfile_utf8.txt
todofuken.xls
todofuken.xlsx
unity
wakayama.xls

os.listdir()を使いフルパスでファイルの一覧を取得

os.listdir()でディレクトリ内の一覧をフルパスで取得したい場合は os.path.join() を使って、パスとディレクトリ・ファイルを結合する必要があります。

後半の項目で紹介するos.scandir()で一覧を取得する方法との違いがココ。

それでは、os.listdir()を使いフルパスでファイルのみの一覧を取得してみたいと思います。

■ここで使用するテクニックは

・os.path.join() 
・os.path.isfile()


ディレクトリ内の一覧を配列で受け取り、for文で順番に取り出し、os.path.join() を使ってディレクトリのパスとディレクトリ・ファイル名を結合。

os.path.isfile()でディレクトリORファイルを判定、ファイルのみを出力します。

import os 

path_dir = "D:/liquidjumper" 

list_file_name =  os.listdir(path_dir) 

for i_file_name in list_file_name: 
    join_path = os.path.join(path_dir,i_file_name) 
    if os.path.isfile(join_path): 
        print(join_path)

説明:

path_dir = "D:/liquidjumper"

list_file_name =  os.listdir(path_dir)

指定したディレクトリ内のファイル・ディレクトリ一覧を取得します。

join_path = os.path.join(path_dir,i_file_name)

os.path.join(ディレクトリパス,ディレクトリ・ファイル名)で結合します。

if os.path.isfile(join_path):

os.path.isfile()でファイルかどうかを判定して、ディレクトリを除外。Trueの場合に次の処理、print()出力 を実行。


結果:

指定したディレクトリ内のファイルのみをフルパスで出力できました。

D:/liquidJumper\new_textfile.txt
D:/liquidJumper\textfile_shift_jis.txt
D:/liquidJumper\textfile_utf8 - コピー.txt
D:/liquidJumper\textfile_utf8.txt
D:/liquidJumper\todofuken.xls
D:/liquidJumper\todofuken.xlsx
D:/liquidJumper\wakayama.xls

os.scandir()でディレクトリ・ファイル一覧を出力する

Python 3 ではディレクトリ・ファイル操作の処理に os.scandir() が追加されました。

 os.scandir() を使うと、ディレクトリ・ファイルの属性・情報も併せて取得できるため、処理の自由度が高く、より簡単にディレクトリ内の一覧を取得することができます。

では os.scandir() を使ってディレクトリ内の一覧を出力してみましょう。

with構文を使い、os.scandir()で取得したディレクトリの要素を変数[dir_i]に代入。
for文で[dir_i]から順番に取り出し .name で名前の情報を参照、print出力します。

import os 

path_dir = "D:/liquidjumper"

with os.scandir(path_dir) as dir_i: 
    for filename in dir_i: 
        print(filename.name)


結果:

os.scandir()で指定したディレクトリ内のディレクトリ・ファイル名の一覧が出力されました。

javascript
new_textfile.txt
python
textfile_shift_jis.txt
textfile_utf8 - コピー.txt
textfile_utf8.txt
todofuken.xls
todofuken.xlsx
unity
wakayama.xls


↓with構文の使い方についてはコチラの記事に書きました↓

os.scandir()でファイル名一覧を出力する

 os.scandir() は、ディレクトリ・ファイルの属性・情報も併せて取得できる事を紹介しました。

では、ディレクトリ なのか ファイル なのかを判別するにはどうしたら良いのでしょう。

 os.scandir() で取得した要素がファイルであると判定するには is_file() を使います。

if文で .is_file()を条件に設定。ファイル判定でTrueの場合は次の処理、print出力を実行します。

import os 

path_dir = "D:/liquidjumper"

with os.scandir(path_dir) as dir_i:
    for filename in dir_i: 
        if filename.is_file():
            print(filename.name)


結果:

指定したディレクトリ内のファイルのみが一覧で出力されました。

new_textfile.txt
textfile_shift_jis.txt
textfile_utf8 - コピー.txt
textfile_utf8.txt
todofuken.xls
todofuken.xlsx
wakayama.xls

os.scandir()でディレクトリ一覧を出力する

では、ディレクトリを判定する場合はどうしたら良いのでしょう。

 os.scandir() で取得した要素がディレクトリであると判定するには is_dir() を使います。

if文で .is_dir()を条件に設定。ディレクトリ判定でTrueの場合は次の処理、print出力を実行します。

import os 

path_dir = "D:/liquidjumper"

with os.scandir(path_dir) as dir_i:
    for filename in dir_i: 
        if filename.is_dir():
            print(filename.name)


結果:

指定したディレクトリ内のディレクトリのみが一覧で出力されました。

javascript
python
unity

[PR] 一般的なドリップコーヒーよりも約2倍のクロロゲン酸を含んだタニタコーヒー!

os.scandir()を使いフルパスでファイルの一覧を出力する

指定したディレクトリ内のディレクトリやファイルの一覧を取得する方法はわかりました。

では、ディレクトリ名やファイル名だけでなく、フルパスで取得するにはどうしたら良いのでしょう

os.scandir() で取得した要素を.nameで参照すると名前を取得しますが、同様に .path で参照するとフルパスを取得できます。

.is_file()でファイル判定し、.pathで要素のフルパスを参照。print出力を実行します。

import os 

path_dir = "D:/liquidjumper"

with os.scandir(path_dir) as dir_i:
    for filename in dir_i: 
        if filename.is_file():
            print(filename.path)


結果:

指定したディレクトリ内のファイルのみの一覧がフルパスで出力されました。

D:/liquidjumper\new_textfile.txt
D:/liquidjumper\textfile_shift_jis.txt
D:/liquidjumper\textfile_utf8 - コピー.txt
D:/liquidjumper\textfile_utf8.txt
D:/liquidjumper\todofuken.xls
D:/liquidjumper\todofuken.xlsx
D:/liquidjumper\wakayama.xls




【TechAcademy(テックアカデミー)ブートキャンプ】

TechAcademy [テックアカデミー] では、初心者でも短期間でPython・機械学習が学べるオンラインブートキャンプPythonコース を開催しています。

過去に独学のプログラミング学習で挫折した経験のある方でも、パーソナルメンターがビデオとチャットでサポート。疑問点を直ぐに解決して次の課題に取り組めます。

オンラインプログラミングスクール受講者No.1、TechAcademy(テックアカデミー)の学習システムの内容や疑問点を聞く事ができるTechAcademy無料動画説明会 も実施されているので、ぜひ参加してみてください。



BTOパソコンの草分け的ブランドFRONTIER(フロンティア)

教育機関や研究施設/3DCG/動画編集/そしてゲームプレイに。
用途に合わせてCPUやGPUなどパーツを自由に選べて、コスパにもこだわる方にオススメ。

ボーナス祭!開催中\GeForce RTX 3070 Tiなど最新GPUを搭載した人気モデルが超特価で登場!/6/25(金)15時まで

≪GeForce RTX 3070 Ti≫≪GeForce RTX 3080 Ti≫を搭載した高性能PCが衝撃コスパで購入できます。

Core i7 + RTX 3060モデルが税込16万円台、Ryzen 7 + RTX 3070モデルが21万円台、Core i7 + GTX 1660モデルが12万円台、Core i7 + RTX 3070 Tiモデルが22万円台

≪全18機種≫見逃し厳禁!SALE製品は台数に限りがあるので売り切れる前に是非

>>【FRONTIER】


【デジハリONLINEの 基礎動画 + AdobeCC一年ライセンス のお得プラン】

デジタルハリウッドのオンラインCGスクール「デジハリONLINE」が提供する、60時間の基礎動画とAdobe creative cloudの一年版ライセンスがパッケージされた、コスパ最強の講座プラン

「Adobeマスター講座」

受講ノルマは一切無し、Adobe製品の利用を目的に契約してもOK!

>>デジハリONLINE講座申込

▶︎基礎動画教材付きAdobe Creative Cloudを年額39,980円(税込)のお得な価格で使用する方法


Twitter Facebook Pocket LINE はてブ

おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事