【Python】ファイル操作の基礎
プログラム学習に気合いを入れるには何か実用的なものが作れたらいいと思います。
WindowsでPythonにファイルネームを変更させる方法を調べました。
実行確認できました。
Pythonで指定したフォルダ内のJPEGファイルにタイムスタンプを付加してリネームする
以下のようなスクリプトを作成できます。このスクリプトは、指定したフォルダ内のすべての`.jpg`ファイルを探し、それぞれのファイル名に現在のタイムスタンプを追加してリネームします。
※以下のコードでは現在のタイムスタンプが追加されます。
import os
import datetime
def rename_files_with_timestamp(folder_path):
# フォルダ内のファイル一覧を取得
files = os.listdir(folder_path)
for file_name in files:
# ファイルがjpgであるか確認
if file_name.lower().endswith('.jpg'):
# 現在のタイムスタンプを取得
timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
# 新しいファイル名を作成
name, ext = os.path.splitext(file_name)
new_name = f"{name}_{timestamp}{ext}"
# ファイルのフルパスを取得
old_path = os.path.join(folder_path, file_name)
new_path = os.path.join(folder_path, new_name)
# ファイルをリネーム
os.rename(old_path, new_path)
print(f"Renamed: {file_name} -> {new_name}")
# 使用例
folder_path = 'your/folder/path'
rename_files_with_timestamp(folder_path)
スクリプトの説明
モジュールのインポート:
`os`モジュールは、ファイルやディレクトリの操作を行うために使用します。
`datetime`モジュールは、現在の日時を取得するために使用します。
`rename_files_with_timestamp`関数:
`folder_path`を引数として取り、指定されたフォルダ内のすべてのファイルをリストします。
各ファイル名について、拡張子が`.jpg`であるかどうかを確認します。
`.jpg`ファイルに対して、現在のタイムスタンプを取得し、ファイル名に追加します。
元のファイル名と新しいファイル名を用いてファイルをリネームします。
リネームの結果をコンソールに出力します。
使用例:
`folder_path`変数に対象フォルダのパスを指定し、関数を呼び出します。
このスクリプトを実行する前に、`folder_path`をリネームしたいJPEGファイルが含まれているフォルダのパスに変更してください。
動作させた結果
ファイルのタイムスタンプではなく、現在のタイムスタンプを取得していることがわかりました。ファイルのタイムスタンプを取得して元のファイル名に付加するプログラムは下記です。
修正したスクリプト
ファイルの作成日時や変更日時を取得して、ファイル名にそのタイムスタンプを付加するようにスクリプトを修正します。以下のスクリプトは、各JPEGファイルの作成日時をファイル名に追加してリネームします。
import os
import time
def rename_files_with_file_timestamp(folder_path):
# フォルダ内のファイル一覧を取得
files = os.listdir(folder_path)
for file_name in files:
# ファイルがjpgであるか確認
if file_name.lower().endswith('.jpg'):
# ファイルのフルパスを取得
old_path = os.path.join(folder_path, file_name)
# ファイルのタイムスタンプを取得
timestamp = os.path.getctime(old_path) # 作成日時
# または変更日時を使う場合は以下を使用
# timestamp = os.path.getmtime(old_path) # 変更日時
# タイムスタンプをフォーマット
formatted_timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime(timestamp))
# 新しいファイル名を作成
name, ext = os.path.splitext(file_name)
new_name = f"{name}_{formatted_timestamp}{ext}"
new_path = os.path.join(folder_path, new_name)
# ファイルをリネーム
os.rename(old_path, new_path)
print(f"Renamed: {file_name} -> {new_name}")
# 使用例
folder_path = 'your/folder/path'
rename_files_with_file_timestamp(folder_path)
スクリプトの説明
モジュールのインポート:
`os`モジュールを使用してファイルやディレクトリの操作を行います。
`time`モジュールを使用してタイムスタンプのフォーマットを行います。
`rename_files_with_file_timestamp`関数:
`folder_path`を引数として取り、指定されたフォルダ内のすべてのファイルをリストします。
各ファイル名について、拡張子が`.jpg`であるかどうかを確認します。
各`.jpg`ファイルについて、作成日時または変更日時のタイムスタンプを取得します。
取得したタイムスタンプを人間が読める形式にフォーマットします。
元のファイル名と新しいファイル名を用いてファイルをリネームします。
リネームの結果をコンソールに出力します。
使用例:
`folder_path`変数に対象フォルダのパスを指定し、関数を呼び出します。
このスクリプトを実行する前に、`folder_path`をリネームしたいJPEGファイルが含まれているフォルダのパスに変更してください。
".jpg"を".jpg"にリネームする
パソコンのJPGファイルを確認した結果".jpeg"と"jpg"の2種類の拡張子が使われていることがわかりました。
指定したフォルダ内の拡張子が`.jpeg`のファイルをすべて`.jpg`にリネームするスクリプトを以下に示します。このスクリプトは、`.jpeg`拡張子のファイルを見つけ、その拡張子を`.jpg`に変更します。
import os
def rename_jpeg_to_jpg(folder_path):
# フォルダ内のファイル一覧を取得
files = os.listdir(folder_path)
for file_name in files:
# ファイルがjpegであるか確認
if file_name.lower().endswith('.jpeg'):
# 新しいファイル名を作成
new_name = file_name[:-5] + '.jpg'
# ファイルのフルパスを取得
old_path = os.path.join(folder_path, file_name)
new_path = os.path.join(folder_path, new_name)
# ファイルをリネーム
os.rename(old_path, new_path)
print(f"Renamed: {file_name} -> {new_name}")
# 使用例
folder_path = 'your/folder/path'
rename_jpeg_to_jpg(folder_path)
スクリプトの説明
モジュールのインポート:
`os`モジュールを使用してファイルやディレクトリの操作を行います。
`rename_jpeg_to_jpg`関数:
`folder_path`を引数として取り、指定されたフォルダ内のすべてのファイルをリストします。
各ファイル名について、拡張子が`.jpeg`であるかどうかを確認します。
拡張子が`.jpeg`の場合、その拡張子を`.jpg`に変更した新しいファイル名を作成します。
元のファイル名と新しいファイル名を用いてファイルをリネームします。
リネームの結果をコンソールに出力します。
使用例:
`folder_path`変数に対象フォルダのパスを指定し、関数を呼び出します。
このスクリプトを実行する前に、`folder_path`をリネームしたいJPEGファイルが含まれているフォルダのパスに変更してください。
実行した結果、該当フォルダ内の".jpeg"拡張子のファイルが".jpg"拡張子にリネームされました。
まとめ
コメント文
コメントにしたい文の頭に#を入れる。
(例) # ファイルがjpegであるか確認
コードの後に入れることもできる。
モジュールのインポート
(例)
import os
import time
関数の宣言
関数に名前をつけ、引数を設定して:(コロン)
(例)
def rename_files_with_file_timestamp(folder_path):
この記事が気に入ったらサポートをしてみませんか?