[Python] カレントディレクトリのファイル一覧を取得・表示する方法

Pythonでカレントディレクトリのファイル一覧を取得・表示するには、標準ライブラリのosモジュールやpathlibモジュールを使用します。

osモジュールではos.listdir()を使い、カレントディレクトリのファイルやディレクトリをリスト形式で取得できます。

pathlibモジュールではPath.cwd()でカレントディレクトリを取得し、iterdir()メソッドでファイル一覧を取得できます。

どちらも簡単にディレクトリ内のファイルを表示できます。

この記事でわかること
  • カレントディレクトリの概念を把握
  • ファイル一覧を取得する方法を習得
  • サブディレクトリ内のファイルも取得
  • 特定条件でのファイルフィルタリング
  • ファイル一覧をテキストファイルに保存

目次から探す

カレントディレクトリとは?

カレントディレクトリとは、現在の作業ディレクトリのことを指します。

プログラムがファイルを読み込んだり、書き込んだりする際に、デフォルトで参照される場所です。

Pythonを含む多くのプログラミング言語では、カレントディレクトリを基準にしてファイルパスを解決します。

例えば、カレントディレクトリが/home/user/projectsである場合、data.txtというファイルを指定する際には、data.txtとだけ記述すれば、Pythonは自動的に/home/user/projects/data.txtを参照します。

カレントディレクトリを変更することも可能で、これにより異なる場所にあるファイルにアクセスすることができます。

カレントディレクトリを確認したり、変更したりすることは、ファイル操作を行う上で非常に重要なスキルです。

Pythonでは、osモジュールやpathlibモジュールを使用して、カレントディレクトリの取得や変更が簡単に行えます。

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

Pythonでは、カレントディレクトリ内のファイル一覧を取得するために、主にosモジュール、pathlibモジュール、globモジュールを使用します。

それぞれの方法について詳しく見ていきましょう。

osモジュールを使った方法

os.listdir()の使い方

osモジュールのlistdir()関数を使用すると、指定したディレクトリ内のファイルとディレクトリの名前をリストとして取得できます。

カレントディレクトリを指定しない場合、デフォルトでカレントディレクトリの内容が取得されます。

import os
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
print(file_list)
['file1.txt', 'file2.py', 'directory1', 'image.png']

ファイルとディレクトリの区別

os.listdir()で取得したリストには、ファイルとディレクトリが混在しています。

ファイルとディレクトリを区別するには、os.pathモジュールのisfile()isdir()を使用します。

import os
# カレントディレクトリのファイルとディレクトリを区別
for item in os.listdir():
    if os.path.isfile(item):
        print(f"{item} はファイルです。")
    elif os.path.isdir(item):
        print(f"{item} はディレクトリです。")
file1.txt はファイルです。
file2.py はファイルです。
directory1 はディレクトリです。
image.png はファイルです。

pathlibモジュールを使った方法

Path.cwd()とiterdir()の使い方

pathlibモジュールは、オブジェクト指向のファイルシステムパスを扱うためのモジュールです。

Path.cwd()を使用してカレントディレクトリを取得し、iterdir()メソッドでその内容を反復処理できます。

from pathlib import Path
# カレントディレクトリのPathオブジェクトを取得
current_dir = Path.cwd()
# カレントディレクトリのファイル一覧を取得
for item in current_dir.iterdir():
    print(item)
file1.txt
file2.py
directory1
image.png

ファイルのみを取得する方法

pathlibを使用して、ファイルのみを取得することも簡単です。

is_file()メソッドを使って、ファイルかどうかを判定できます。

from pathlib import Path
# カレントディレクトリのPathオブジェクトを取得
current_dir = Path.cwd()
# ファイルのみを取得
for item in current_dir.iterdir():
    if item.is_file():
        print(f"{item.name} はファイルです。")
file1.txt はファイルです。
file2.py はファイルです。
image.png はファイルです。

globモジュールを使った方法

ワイルドカードを使ったファイル検索

globモジュールを使用すると、ワイルドカードを使って特定のパターンにマッチするファイルを取得できます。

例えば、すべてのテキストファイルを取得する場合は以下のようにします。

import glob
# カレントディレクトリ内のすべてのテキストファイルを取得
text_files = glob.glob("*.txt")
print(text_files)
['file1.txt']

特定の拡張子のファイルを取得する方法

特定の拡張子のファイルを取得する場合も、globモジュールを使用することで簡単に実現できます。

例えば、すべてのPythonファイルを取得する場合は以下のようにします。

import glob
# カレントディレクトリ内のすべてのPythonファイルを取得
python_files = glob.glob("*.py")
print(python_files)
['file2.py']

ファイル一覧の表示方法

カレントディレクトリ内のファイル一覧を取得した後、これらのファイルを表示する方法はいくつかあります。

ここでは、シンプルな表示から詳細情報の表示まで、さまざまな方法を紹介します。

print()を使ったシンプルな表示

最も基本的な方法は、print()関数を使ってファイル名をそのまま表示することです。

以下のコードでは、osモジュールを使用してカレントディレクトリのファイル一覧を取得し、シンプルに表示しています。

import os
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイル名を表示
print("ファイル一覧:")
print(file_list)
ファイル一覧:
['file1.txt', 'file2.py', 'directory1', 'image.png']

ファイル名を1行ずつ表示する方法

ファイル名を1行ずつ表示する場合は、ループを使用して各ファイル名を個別に出力します。

以下のコードでは、osモジュールを使ってファイル名を1行ずつ表示しています。

import os
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイル名を1行ずつ表示
print("ファイル一覧:")
for file_name in file_list:
    print(file_name)
ファイル一覧:
file1.txt
file2.py
directory1
image.png

ファイルの詳細情報を表示する方法

ファイルの詳細情報を表示するには、osモジュールやpathlibモジュールを使用して、ファイルサイズや作成日時、パーミッションなどの情報を取得します。

ファイルサイズや作成日時の取得

以下のコードでは、osモジュールを使用して、各ファイルのサイズと作成日時を表示します。

import os
import time
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイルのサイズと作成日時を表示
print("ファイルの詳細情報:")
for file_name in file_list:
    if os.path.isfile(file_name):  # ファイルのみ対象
        file_size = os.path.getsize(file_name)  # ファイルサイズを取得
        creation_time = time.ctime(os.path.getctime(file_name))  # 作成日時を取得
        print(f"{file_name}: サイズ = {file_size} bytes, 作成日時 = {creation_time}")
ファイルの詳細情報:
file1.txt: サイズ = 1024 bytes, 作成日時 = Mon Oct 23 12:34:56 2023
file2.py: サイズ = 2048 bytes, 作成日時 = Mon Oct 23 12:35:56 2023
image.png: サイズ = 5120 bytes, 作成日時 = Mon Oct 23 12:36:56 2023

ファイルのパーミッションを表示する方法

ファイルのパーミッションを表示するには、osモジュールのstat()関数を使用します。

以下のコードでは、各ファイルのパーミッションを表示します。

import os
import stat
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイルのパーミッションを表示
print("ファイルのパーミッション:")
for file_name in file_list:
    if os.path.isfile(file_name):  # ファイルのみ対象
        permissions = stat.filemode(os.stat(file_name).st_mode)  # パーミッションを取得
        print(f"{file_name}: パーミッション = {permissions}")
ファイルのパーミッション:
file1.txt: パーミッション = -rw-r--r--
file2.py: パーミッション = -rw-r--r--
image.png: パーミッション = -rw-r--r--

これらの方法を使うことで、カレントディレクトリ内のファイルをさまざまな形式で表示し、必要な情報を得ることができます。

応用例

カレントディレクトリ内のファイル一覧を取得する基本的な方法を学んだ後、さらに応用的な操作を行うことができます。

ここでは、サブディレクトリ内のファイルを含めて一覧を取得する方法や、特定の条件でフィルタリングする方法、ファイル一覧をソートして表示する方法、そしてファイル一覧をテキストファイルに保存する方法について説明します。

サブディレクトリ内のファイルも含めて一覧を取得する方法

サブディレクトリ内のファイルも含めて一覧を取得するには、os.walk()を使用します。

この関数は、指定したディレクトリ内のすべてのファイルとサブディレクトリを再帰的に取得します。

import os
# カレントディレクトリ内のすべてのファイルを取得
for dirpath, dirnames, filenames in os.walk('.'):
    for file_name in filenames:
        print(os.path.join(dirpath, file_name))
./file1.txt
./file2.py
./directory1/file3.txt
./directory1/image.png

特定の条件でフィルタリングしてファイルを取得する方法

特定の条件でファイルをフィルタリングするには、条件文を使用してファイル名や拡張子をチェックします。

以下の例では、.txtファイルのみを取得しています。

import os
# カレントディレクトリ内の.txtファイルを取得
txt_files = [file for file in os.listdir() if file.endswith('.txt')]
print("テキストファイル一覧:")
print(txt_files)
テキストファイル一覧:
['file1.txt', 'file3.txt']

ファイル一覧をソートして表示する方法

ファイル一覧をソートして表示するには、sorted()関数を使用します。

以下のコードでは、ファイル名をアルファベット順にソートして表示しています。

import os
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイル名をソート
sorted_file_list = sorted(file_list)
print("ソートされたファイル一覧:")
print(sorted_file_list)
ソートされたファイル一覧:
['directory1', 'file1.txt', 'file2.py', 'image.png']

ファイル一覧をテキストファイルに保存する方法

取得したファイル一覧をテキストファイルに保存するには、open()関数を使用してファイルを書き込みモードで開き、write()メソッドで内容を保存します。

以下のコードでは、カレントディレクトリのファイル一覧をfile_list.txtに保存しています。

import os
# カレントディレクトリのファイル一覧を取得
file_list = os.listdir()
# ファイル一覧をテキストファイルに保存
with open('file_list.txt', 'w', encoding='utf-8') as f:
    for file_name in file_list:
        f.write(file_name + '\n')
print("ファイル一覧を file_list.txt に保存しました。")
ファイル一覧を file_list.txt に保存しました。

これらの応用例を活用することで、Pythonを使ったファイル操作の幅が広がり、より効率的に作業を進めることができます。

よくある質問

os.listdir()とpathlibの違いは?

os.listdir()pathlibは、どちらもディレクトリ内のファイル一覧を取得するために使用されますが、いくつかの違いがあります。

  • 使用方法:
  • os.listdir()は、指定したディレクトリのファイル名をリストとして返します。

シンプルで使いやすいですが、ファイルの詳細情報を取得するためには追加の処理が必要です。

  • pathlibは、オブジェクト指向のアプローチを提供し、ファイルやディレクトリをPathオブジェクトとして扱います。

これにより、ファイルの詳細情報(サイズ、作成日時、パーミッションなど)を簡単に取得できます。

  • 可読性:
  • pathlibは、コードがより直感的で可読性が高く、ファイル操作を行う際に便利です。

隠しファイルを取得するにはどうすればいい?

隠しファイルは、通常、ファイル名の先頭にドット.が付いているファイルです。

隠しファイルを取得するには、os.listdir()pathlibを使用して、ファイル名がドットで始まるかどうかをチェックします。

以下は、osモジュールを使用して隠しファイルを取得する例です。

import os
# 隠しファイルを取得
hidden_files = [file for file in os.listdir() if file.startswith('.')]
print("隠しファイル一覧:")
print(hidden_files)
隠しファイル一覧:
['.gitignore', '.env']

ファイル一覧を取得する際にエラーが発生した場合の対処法は?

ファイル一覧を取得する際にエラーが発生することがあります。

一般的なエラーとその対処法は以下の通りです。

  • PermissionError:
  • 原因: アクセス権限がないディレクトリにアクセスしようとした場合。
  • 対処法: アクセス権限を確認し、必要に応じて権限を変更するか、別のディレクトリを指定します。
  • FileNotFoundError:
  • 原因: 指定したディレクトリが存在しない場合。
  • 対処法: ディレクトリのパスを確認し、正しいパスを指定します。
  • OSError:
  • 原因: その他の入出力エラーが発生した場合。
  • 対処法: エラーメッセージを確認し、原因を特定して対処します。

エラー処理を行うために、tryexceptを使用してエラーをキャッチし、適切なメッセージを表示することが推奨されます。

import os
try:
    file_list = os.listdir('some_directory')
    print(file_list)
except PermissionError:
    print("アクセス権限がありません。")
except FileNotFoundError:
    print("指定したディレクトリが見つかりません。")
except OSError as e:
    print(f"エラーが発生しました: {e}")

このように、エラー処理を行うことで、プログラムが予期しない状況に対処できるようになります。

まとめ

この記事では、Pythonを使用してカレントディレクトリのファイル一覧を取得し、表示する方法について詳しく解説しました。

具体的には、osモジュール、pathlibモジュール、globモジュールを用いたファイル一覧の取得方法や、ファイルの詳細情報を表示する方法、さらには応用的な操作としてサブディレクトリ内のファイルを含めた一覧取得や特定条件でのフィルタリング、ファイル一覧のソート、テキストファイルへの保存方法についても触れました。

これらの技術を活用することで、Pythonを使ったファイル操作の効率を高め、より柔軟なプログラムを作成することが可能になります。

ぜひ、実際のプロジェクトや日常のタスクにこれらの方法を取り入れてみてください。

  • URLをコピーしました!
目次から探す