import os
# フォルダ内のファイル名のみを取得
folder_path = "sample_folder"
files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
print("フォルダ内のファイル:")
print(files)
このコードでは、各項目がファイルであるかをチェックして、ファイル名のみをリストに格納しています。
使用例
例えば、あるフォルダ内に保存された画像ファイルのリストを作成したい場合、以下のように活用できます。
import os
# 画像ファイルを取得
folder_path = "images"
image_files = [f for f in os.listdir(folder_path) if f.endswith((".png", ".jpg", ".jpeg"))]
print("画像ファイル一覧:")
print(image_files)
from pathlib import Path
# フォルダ内のファイルを取得
folder_path = Path("sample_folder")
files = [f for f in folder_path.iterdir() if f.is_file()]
print("フォルダ内のファイル:")
print(files)
このコードでは、ディレクトリは除外され、ファイルのみがリストに格納されます。
拡張子でフィルタリング
特定の拡張子を持つファイルだけを取得するには、拡張子を条件として指定します。
from pathlib import Path
# フォルダ内の特定拡張子を持つファイルを取得
folder_path = Path("sample_folder")
text_files = [f for f in folder_path.iterdir() if f.is_file() and f.suffix == ".txt"]
print("テキストファイル:")
print(text_files)
import os
# サブディレクトリ内のすべてのファイルを取得
folder_path = "sample_folder"
for root, dirs, files in os.walk(folder_path):
for file in files:
print(f"ファイル: {os.path.join(root, file)}")
import os
# サブディレクトリ内のすべてのファイルをリストに格納
folder_path = "sample_folder"
all_files = []
for root, dirs, files in os.walk(folder_path):
for file in files:
all_files.append(os.path.join(root, file))
print("サブディレクトリ内のすべてのファイル:")
print(all_files)
特定の拡張子を持つファイルのみ取得
例えば、.txtファイルだけを取得したい場合、次のように条件を追加します。
import os
# サブディレクトリ内の特定の拡張子を持つファイルを取得
folder_path = "sample_folder"
txt_files = []
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith(".txt"):
txt_files.append(os.path.join(root, file))
print("テキストファイル:")
print(txt_files)
import os
# 指定した拡張子のファイルを取得
folder_path = "sample_folder"
txt_files = [f for f in os.listdir(folder_path) if f.endswith(".txt")]
print("テキストファイル:")
print(txt_files)
from pathlib import Path
# 拡張子が.txtのファイルを取得
folder_path = Path("sample_folder")
txt_files = [f for f in folder_path.iterdir() if f.suffix == ".txt"]
print("テキストファイル:")
print(txt_files)
ファイル名に特定の文字列を含む場合
特定の文字列がファイル名に含まれているかを判定するには、in演算子を使います。
import os
# ファイル名に"report"を含むファイルを取得
folder_path = "sample_folder"
report_files = [f for f in os.listdir(folder_path) if "report" in f]
print("reportを含むファイル:")
print(report_files)
import os
import re
# ファイル名が数字のみで構成されたファイルを取得
folder_path = "sample_folder"
pattern = re.compile(r"^\d+$")
files = [f for f in os.listdir(folder_path) if pattern.match(f)]
print("数字のみのファイル名:")
print(files)
import os
# サイズが1MB以上のファイルを取得
folder_path = "sample_folder"
large_files = [f for f in os.listdir(folder_path) if os.path.getsize(os.path.join(folder_path, f)) > 1 * 1024 * 1024]
print("1MB以上のファイル:")
print(large_files)
応用例
1. 拡張子で分類する 複数の拡張子を持つファイルを分類したい場合、以下のように書けます。
import os
# ファイルを拡張子で分類
folder_path = "sample_folder"
files_by_extension = {}
for f in os.listdir(folder_path):
ext = os.path.splitext(f)[1] # 拡張子を取得
if ext not in files_by_extension:
files_by_extension[ext] = []
files_by_extension[ext].append(f)
print("拡張子ごとの分類:")
print(files_by_extension)
import os
# フォルダ内のテキストファイルを取得
folder_path = "sample_folder"
text_files = [f for f in os.listdir(folder_path) if f.endswith(".txt")]
# ファイル内容をまとめて読み込む
all_content = ""
for file in text_files:
with open(os.path.join(folder_path, file), "r", encoding="utf-8") as f:
all_content += f.read() + "
"
print("すべてのテキストファイルの内容:")
print(all_content)
import os
# フォルダ内の特定の拡張子を持つファイルを削除
folder_path = "sample_folder"
files = [f for f in os.listdir(folder_path) if f.endswith(".tmp")]
for file in files:
os.remove(os.path.join(folder_path, file))
print("不要なファイルを削除しました。")
import os
def get_files(folder_path):
for root, _, files in os.walk(folder_path):
for file in files:
yield os.path.join(root, file)
folder_path = "sample_folder"
for file in get_files(folder_path):
print(f"処理中: {file}")