Pythonを使ってみようと思っても慣れていないうちは、どうしても処理に躓いてしまうものです。
例えば、pythonにて同じフォルダ(ディレクトリ)内のすべてのファイル名を連番となるよう変更(リネーム)するには、どのように対応すればいいのか理解していますか。
ここでは特に
・元のファイル名を考慮せずに新規のファイル名「renshuu_001」などとなるよう連番リネーム
・元のファイル名の一部を残しつつ連番を一括でつける
コードについて、実際の処理画像と共に解説していきます。
同じディレクトリ内のすべてのファイルに同じ処理(csvを次々読み込み、excelに一括変換)【python】
それでは、Pythonにて指定フォルダ内のすべてのファイルに同じ処理(csvを次々読み込み、excelに一括変換)をする方法についてチェックします。
pandasとglobライブラリを活用しましょう。
前提としてが各ライブラリ、動作するように予め開発環境にてパッケージをインストールしてください。基本的にはコマンドラインから pip install pandas
などと実行すればOKです(jupyter notebookなど)。
その上で以下のようなサンプルコードを書くといいです。
import glob
import pandas as pd
import os
os.chdir("C://sample7")
# フォルダ内の全てのCSVファイルを読み込む
csv_files = glob.glob('*.csv') # 現在のディレクトリ内のCSVファイルを探す
# 各CSVファイルを読み込み、連番でリネームして再度CSVとして出力
for i, csv_file in enumerate(csv_files, start=1):
# CSVファイルを読み込む
df = pd.read_csv(csv_file)
# 連番でリネームしてCSV形式で出力
# "renshuu_"に三桁の連番をつけたファイル名を作る
new_csv_file = f"renshuu_{i:03}.csv"
df.to_csv(new_csv_file, index=False)
jupyter notebook上でのファイル名の連番変更(リネーム)の実行画面は以下の通り。
ポイントとしては、
・for文でループ処理する際には、enumerate
を使い、ファイル名とインデックス(数字)を同時に取り出す
・pandasにてcsvやexcelファイルの読み込みや出力→for分で次々と同じ処理
・globにて、同じフォルダ内のすべてのファイル(拡張子なども指定できる)を読み込み
・f"renshuu_{i:03}
にて、renshuu_の後に001,002などとなるよう連番を振る(リネーム・変更)
ですね。
処理前のフォルダ内は以下の状態でした。
pythonでの連番リネーム処理を実行後は以下のようになっています。
ファイル名に連番を振った後の結果は以下の通り。
保存時は拡張子まで指定しましょう(.csvなど)。
出力フォルダを別にしたい場合【pythonで連番を振る(変更)】
ファイル名を連番リネームしたものを別のフォルダに格納する場合は、単純に出力フォルダも指定するといいです。
以下のように書きましょう。
df.to_csv("C://output_sample//"+new_csv_file, index=False)
すべて合わせた別フォルダに連番リネーム後のファイルを保存するコードは以下の通りです。
import glob
import pandas as pd
import os
os.chdir("C://sample7")
# フォルダ内の全てのCSVファイルを読み込む
csv_files = glob.glob('*.csv') # 現在のディレクトリ内のCSVファイルを探す
# 各CSVファイルを読み込み、連番でリネームして再度CSVとして出力
for i, csv_file in enumerate(csv_files, start=1):
# CSVファイルを読み込む
df = pd.read_csv(csv_file)
# 連番でリネームしてCSV形式で出力
# "renshuu_"に三桁の連番をつけたファイル名を作る
new_csv_file = f"renshuu_{i:03}.csv"
df.to_csv("C://output_sample//"+new_csv_file, index=False)
状況に応じて使い分けましょう。
元のファイル名の一部を残して連番を作成する方法
連番を振る前のファイル名の一部(拡張子より前など)を残したい時もあるでしょう。
基本的には上と同じですが、
・元ファイル名と拡張子を分離
・元ファイル名+連番を振る
・再度拡張子を付ける
の流れで実行するといいです。
import glob
import pandas as pd
# フォルダ内の全てのCSVファイルを読み込む
csv_files = glob.glob('*.csv') # 現在のディレクトリ内のCSVファイルを探す
# 各CSVファイルを読み込み、連番を追加して再度CSVとして出力
for i, csv_file in enumerate(csv_files, start=1):
# CSVファイルを読み込む
df = pd.read_csv(csv_file)
# ファイル名から拡張子を取り除く
base_name = csv_file.rsplit('.', 1)[0]
# 連番を追加して新しいファイル名を作成
new_csv_file = f"{base_name}_{i:03}.csv"
df.to_csv(new_csv_file, index=False)
このあたりの基本操作は、自身で考えだすというよりも、当サイトなどを参考&暗記&経験を積むに徹した方がいいですね。
まとめ pythonでの連番作成(リネーム)方法【同じフォルダ内のすべてのファイル .xlsxなど】
ここでは、ファイル名を連番で変更(リネーム)する方法【同じフォルダ内のすべてのファイル.csvなど】を解説しました。
pythonでの処理はややこしい部分が多いので、この機会に理解しておくといいです。
pythonのさまざまな扱いに慣れ、効率よく作業を進めていきましょう。
コメント