Pythonでディレクトリ内のファイル一覧を取得したい
プログラミングでディレクトリ・ファイルの操作は外せないテクニックの1つ。
逆に言えばディレクトリ・ファイルの扱い方を知らずにプログラミングをするのは困難とも言えます。
そして各プログラミング言語同様にPythonにもディレクトリ・ファイル操作を扱うための便利な機能が備わっています。
そこでこの記事では、PythonのOSモジュールの os.listdir() と os.scandir() を使い、指定したディレクトリ内の一覧を取得する方法を紹介します。
ディレクトリ・ファイルの操作はプログラミングには欠かせないテクニックです。
os.listdir() と os.scandir() の使い方の違いを含め紹介するので、是非参考にしてみてください。
■扱うテクニック
・os.listdir()でファイルの一覧を取得
・os.scandir()でファイルの一覧を取得
・ファイル名で取得、フルパスで取得
・ディレクトリ・ファイルを判定
|
Pythonでディレクトリ・ファイルの一覧を取得する
それではosモジュールで D:/liquidJumper のディレクトリ一覧を取得したいと思います。
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
|
自宅からでもWeb制作・プログラミング・アプリ開発などが習得できるさまざまなコースをラインナップ。
非エンジニアでスキルを磨きたい方から、フリーランス、就職/転職を目指す方まで、専属のメンターがサポート。
最近は副業ブームもあり「 はじめての副業コース 」が人気です。
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|