pandas.read_csv読み込んだCSVファイルのファイル名を出力する画像ファイル名に追加したい

投稿者: Anonymous

次のようにして読み込んだファイル”sample12345.csv”

df = pd.read_csv("./sample12345.csv", sep=',' , encoding="UTF-8")

自動的に下記のようなファイル名で出力する方法はありますか?
(sampleだけを抜き出して,”saveimage_”の後ろに追加している)

plt.savefig("./saveimage_sample.png")

さらに下記のように更新日時(2018/10/17/22:50)も追加できる方法もあれば知りたいです。

plt.savefig("./saveimage_sample201810172200.png")

また、画像にファイル名の一部を書き込む方法もあれば・・・。

plt.text(50, 300, "sample201810172200")

よろしくお願いいたします。

解決

読み込んだファイルのパスをdfは保存していないので、最初にそれを変数に保存しておく必要があります。次のようなコードで、「sampleだけを抜き出して,”saveimage_”の後ろに追加している」ことを自動でできます。

from pathlib import Path
import re

in_file = './sample12345.csv'
df = pd.read_csv(in_file, sep=',', encoding="UTF-8")

# pathlibのstemを使ってパス要素の末尾から拡張子を除いたものを取得して、正規表現を使って後部にある数字を除外
p = Path(in_file)
m = re.search(r'(.*D)d*$', p.stem)
stem_name = m.group(1)

# 出力ファイルのパスを計算
out_file = p.parent / ('saveimage_' + stem_name + '.png')
plt.savefig(out_file)

更新日時については、元の”sample12345.csv”ファイルの更新日時なのか、plt.savefigをした日時なのか2つのケースが考えられます。
“sample12345.csv”ファイルの更新日時であれば、os.path.getmtimeでファイルの更新日時がエポック秒で取得できるので以下のようなコードで更新日時が取得できます。

import os
from datetime import datetime

t = os.path.getmtime(in_file)
# エポック秒をdatetimeに変換
dt = datetime.fromtimestamp(t)
tstr = dt.strftime('%Y%m%d%H%M')

# 出力ファイル名の修正
out_file = p.parent / ('saveimage_' + stem_name + tstr + '.png')

# plt.textのパラメータ修正
plt.text(50, 300, stem_name + tstr)

plt.savefigをした日時であれば、上のコードで現在時刻を使用すれば問題ないと思われます。

dt = datetime.now()
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *