はじめに
この実験では、Python を使ってファイルとフォルダを操作する方法を理解するのに役立ちます。os モジュールと glob モジュールを使用します。これらのモジュールは、ファイルシステムとやり取りし、ファイルやディレクトリの作成、削除、移動などの一般的な操作を行う方法を提供します。
達成目標
- os モジュール
- glob モジュール
フォルダとファイルの作成
以下は、複数のサンプル フォルダとファイルを作成する Python コードです。
import os
## 複数のサンプル フォルダとファイルを作成する
for i in range(3):
## 各グループ用に新しいフォルダを作成する
folder_name = "group_" + str(i)
os.makedirs(folder_name)
## 各フォルダ内にサンプル ファイルを作成する
for j in range(3):
file_name = "file_" + str(j) + ".txt"
file_path = os.path.join(folder_name, file_name)
with open(file_path, "w") as file:
file.write("This is a sample file.")
エディタで create_samples.py を開き、コードを実行して結果を確認できます。
os.makedirs(path) は、Python の os モジュールの関数で、指定されたパスにディレクトリを作成します。この場合、path は folder_name で、外側の for ループの i 変数の現在の値に文字列 "group_" を連結することで構築され、"group_0"、"group_1"、"group_2" となります。
os.path.join(path1, path2,...) は、os.path モジュールの関数で、1 つ以上のパスを結合します。この場合、path1 は folder_name で、path2 は file_name で、内側の for ループの j 変数の現在の値に文字列 "file_" を連結することで構築され、"file_0.txt"、"file_1.txt"、"file_2.txt" となります。os.path.join() 関数は、フォルダ名とファイル名を連結して完全なファイル パスを作成し、ファイルをフォルダ内に作成できるようにします。
os.path.join 関数を使用することで、コードは、コードが Windows、Linux、または macOS で実行されるかどうかに関係なく、現在のオペレーティング システムに適した区切り文字を使用してフォルダ名とファイル名を結合します。
Os モジュールに関する詳細
Python の os モジュールは、オペレーティング システムとやり取りする方法を提供し、ディレクトリの作成と削除、ファイルの読み書き、コマンドの実行など、様々なタスクを実行できるようにします。
新しい Python インタプリタを開きます。
python3
os モジュールが提供する他の便利な関数のいくつかの例を以下に示します。
os.listdir(path): 指定されたディレクトリ内のすべてのファイルとディレクトリのリストを返します。os.listdir('.') ## 現在のディレクトリ内のすべてのファイルとディレクトリのリストを返しますos.remove(path): 指定されたパスのファイルを削除します。os.remove('file.txt') ## 'file.txt' という名前のファイルを削除しますos.rmdir(path): 指定されたパスの空のディレクトリを削除します。os.rmdir('folder') ## 'folder' という名前の空のフォルダを削除しますos.rename(src, dst): ファイルまたはディレクトリを src パスから dst パスにリネームします。os.rename('file1.txt', 'file2.txt') ## 'file1.txt' という名前のファイルを 'file2.txt' にリネームしますos.chdir(path): 現在の作業ディレクトリを指定されたパスに変更します。os.chdir('/home/user/documents') ## 現在の作業ディレクトリを '/home/user/documents' に変更しますos.getcwd(): 現在の作業ディレクトリを返します。os.getcwd() ## 現在の作業ディレクトリを返します。たとえば '/home/user/documents'
上記の関数のほとんどは、指定されたファイルまたはディレクトリが存在しない場合や必要な権限がない場合に例外 (FileNotFoundError、OSError など) を発生させます。
ディレクトリ ツリーを歩く
os.walk(top, topdown=True, onerror=None, followlinks=False) は、Python の os モジュールの関数で、ディレクトリ ツリーを上から下または下から上に巡回することで、ディレクトリ ツリー内のファイル名を生成します。デフォルトでは、os.walk() はディレクトリ ツリー内のファイル名を上から下に生成します。ディレクトリ top (自身も含む) をルートとするツリー内の各ディレクトリに対して、3 要素のタプル (dirpath, dirnames, filenames) を生成します。
以下は、os.walk() を使ってディレクトリとそのサブディレクトリ内のすべてのファイルを表示する方法の例です。
import os
## ディレクトリとそのサブディレクトリ内のすべてのファイルを表示する
for root, dirs, files in os.walk('.'):
for file in files:
print(os.path.join(root, file))
このコードは、現在のディレクトリ ('.' で示されます) から始まり、再帰的にすべてのサブディレクトリを巡回し、見つけた各ファイルの完全なパスを表示します。
以下は、os.walk() を使って特定のディレクトリ内で特定の拡張子を持つ特定のファイルを検索する別の例です。
import os
def search_file(directory, file_extension):
for root, dirs, files in os.walk(directory):
for file in files:
if file.endswith(file_extension):
print(os.path.join(root, file))
search_file('.','.txt')
これは、'.txt' 拡張子を持つすべてのファイルを検索し、そのファイルの完全なパスを表示します。
os.walk() は、ファイルの検索、ディレクトリ構造の分析など、多くのタスクに使用できる強力な関数です。
os.walk はジェネレータであることに注意することが重要です。これは、すべての値をメモリに保持するのではなく、実行時に値を生成するため、大きなディレクトリ ツリーを処理する際に効率的です。
Glob モジュール
Python の glob モジュールは、ワイルドカード文字を使ってファイルとディレクトリを検索する方法を提供します。glob.glob(pathname) は、指定された pathname パターンに一致するファイル パスのリストを返します。
以下は、glob.glob() を使って現在のディレクトリ内の ".txt" 拡張子を持つすべてのファイルを見つける方法の例です。
import glob
txt_files = glob.glob('*.txt')
print(txt_files)
このコードは、現在のディレクトリ内の ".txt" 拡張子を持つすべてのファイルを検索し、パターンに一致するファイル パスのリストを返します。
これは os.walk() 関数に似ていますが、サブディレクトリを再帰的に検索しません。現在のディレクトリ内で指定されたパターンに一致するファイルのみを探します。
以下は、glob.glob() を使ってすべてのサブディレクトリ内の ".txt" 拡張子を持つすべてのファイルを見つける方法の例です。
import glob
txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)
このコードは、現在のディレクトリとすべてのサブディレクトリ内の ".txt" 拡張子を持つすべてのファイルを検索します。
一般的に、1 つのディレクトリとそのサブディレクトリ内のファイルのみを探している場合、glob.glob() の方が便利です。ただし、os.walk() は、複数のディレクトリ内のファイルを検索したり、ディレクトリ ツリーの構造を分析したりするため、より強力で柔軟です。
os.walk と同様に、glob もジェネレータであることに注意することが重要です。これは、すべての値をメモリに保持するのではなく、実行時に値を生成するため、多数のファイルを処理する際に効率的です。
まとめ
この実験では、os モジュールと glob モジュールを使って Python でファイルとフォルダを操作する方法を学びました。新しいフォルダを作成する方法、現在の作業ディレクトリを変更する方法、新しいファイルを作成する方法、ファイルに書き込む方法、ファイルを閉じる方法、ディレクトリの内容を一覧表示する方法、および glob を使って特定のパターンに一致するファイルを見つける方法について説明しました。



