Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで特定のディレクトリ内のファイルを反復処理する方法をわかりやすく解説

os.listdir()でディレクトリの中身を一括取得する

Pythonで特定のディレクトリ内のファイルやフォルダを反復処理したい場合、最も基本的な方法が標準ライブラリのos.listdir()を使うことです。os.listdir(my_path)を実行すると、指定したパス(my_path)に含まれるファイルとディレクトリの一覧がリスト形式で返されます。

以下は、カレントディレクトリ('.')の中身を取得する例です。

>>> import os
>>> os.listdir('.')
['DLLs', 'Doc', 'etc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'README.txt', 'Scripts', 'share', 'tcl', 'Tools', 'w9xpopen.exe']

このように、ファイルだけでなくサブディレクトリもすべて含まれる点に注意してください。

os.path.isfile()でファイルだけを抽出する

ディレクトリではなく「ファイルだけ」を取得したい場合は、リスト内包表記とos.path.isfile()を組み合わせてフィルタリングします。パスを正しく結合するためにos.path.join()を使うのがポイントです。

>>> import os
>>> file_list = [f for f in os.listdir('.') if os.path.isfile(os.path.join('.', f))]
>>> print(file_list)
['LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.exe', 'README.txt', 'w9xpopen.exe']

このコードでは、各要素に対してos.path.isfile()で判定を行い、ファイルであるものだけを新しいリストに格納しています。逆にディレクトリだけを取得したい場合は、os.path.isdir()に置き換えるだけで対応できます。

よりモダンな代替手段:pathlibとos.scandir()

Python 3.4以降では、オブジェクト指向的な操作が可能なpathlibモジュールも便利です。

from pathlib import Path

p = Path('.')
files = [f for f in p.iterdir() if f.is_file()]
print(files)

また、大量のファイルを扱う場合は、os.scandir()を使うとos.listdir()よりも効率的に処理できます。用途に応じてこれらの方法を使い分けるとよいでしょう。

  1. Pythonでディレクトリ内の複数のファイルを削除する方法

    Pythonでは、osモジュールに用意されている関数を使うことで、単一のファイルや空のフォルダを簡単に削除できます。この記事では、1つのファイルの削除から、複数ファイルの一括削除、さらには正規表現を使ったパターンマッチングによる削除まで、具体的な方法を解説します。単一ファイルの削除まず、基本的な例として、my_file.txtというファイルを削除する場合は以下のように記述します。>>> import os >>> os.remove(my_file.txt)os.remove()の引数には、絶対パスまたは相対パスを指定します。指定したパスにファイルが存在しな

  2. Pythonでディレクトリ内の複数ファイルの名前を一括変更するには?(os.renameとshutil.moveの使い方)

    Pythonでディレクトリ内の複数のファイル名を変更したい場合、「現在のファイル名」と「新しいファイル名」の対応を辞書などで持っておけば、osモジュールのrename()メソッドを使って簡単に一括処理できます。 osモジュールのrename()を使う方法 import os for old, new in files.items(): # Python 2では iteritems() os.rename(old, new) os.rename(old, new)は、パスoldにあるファイルをnewという名前に変更します。なお、Windows環境では移動先に同名のファイルが存在すると