ファイルとフォルダの操作

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Pythonを使ってファイルとフォルダを操作する方法を理解するのに役立ちます。os モジュールと glob モジュールを使用します。これらのモジュールは、ファイルシステムとやり取りし、ファイルやディレクトリの作成、削除、移動などの一般的な操作を行う方法を提供します。

達成目標

  • osモジュール
  • globモジュール

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/for_loops -.-> lab-77{{"ファイルとフォルダの操作"}} python/importing_modules -.-> lab-77{{"ファイルとフォルダの操作"}} python/standard_libraries -.-> lab-77{{"ファイルとフォルダの操作"}} python/raising_exceptions -.-> lab-77{{"ファイルとフォルダの操作"}} python/file_operations -.-> lab-77{{"ファイルとフォルダの操作"}} python/generators -.-> lab-77{{"ファイルとフォルダの操作"}} python/os_system -.-> lab-77{{"ファイルとフォルダの操作"}} end

フォルダとファイルの作成

以下は、複数のサンプル フォルダとファイルを作成する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 モジュールの関数で、指定されたパスにディレクトリを作成します。この場合、pathfolder_name で、外側のforループの i 変数の現在の値に文字列 "group_" を連結することで構築され、"group_0"、"group_1"、"group_2" となります。

os.path.join(path1, path2,...) は、os.path モジュールの関数で、1つ以上のパスを結合します。この場合、path1folder_name で、path2file_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を使って特定のパターンに一致するファイルを見つける方法について説明しました。