49400


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

[code]

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

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

[code]

    plt.savefig("./saveimage_sample.png")
    
[/code]

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

[code]

    plt.savefig("./saveimage_sample201810172200.png")
    
[/code]

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

[code]

    plt.text(50, 300, "sample201810172200")
    
[/code]

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


CC BY-SA 4.0
2018-10-17T13:51:54.567
49388
2019-12-12T15:14:55.813
2018-10-18T00:28:17.100
3060
30391
question
python pandas matplotlib numpy
pandas.read_csv読み込んだCSVファイルのファイル名を出力する画像ファイル名に追加したい


osモジュールの`rename()`という関数が使えるかと思います。下記が詳細な説明です。

[code]

    "os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)"
    ファイルまたはディレクトリ src の名前を dst へ変更します。
    
[/code]

osモジュールは`import os`でインポートできます。  
名前の変更方法としては

[code]

    os.rename('変更前のファイル名', '変更後のファイル名')
    
[/code]

って感じです。  
肝心な「自動で」というところですが、更新日時の取得は同じosモジュールのdatetime関数で出来たような気がします。それを文字列に変換して結合するっていう方針ですね。詳しくはわからないので調べてみるといいと思います。  
ファイル名の一部を取得する方法はちょっとわかりません(^ ^;;)  
他の人の回答を待ちましょう。。。  
もし見つけたら再び回答させていただきます。

もしかしたら`string.replace()`というものが使えるかもしれません。  
例えば上記のような例でしたら

[code]

    file_name = string.replace("saveimage_", "")
    
[/code]

でsaveimage_を消去することができます。またこのfile_nameに先ほどのdatetimeで取得した更新日時の文字列と結合させれば

[code]

    new_file_name = file_name + '取得した更新日時の文字列'
    
[/code]

でnew_file_nameに画像ファイル名の一部を格納することができます。


CC BY-SA 4.0
2018-10-17T14:39:33.023
49390
2019-12-12T15:14:55.813
2019-12-12T15:14:55.813
12457
29506
49388
answer


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

[code]

    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)
    
[/code]

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

[code]

    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)
    
[/code]

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

[code]

    dt = datetime.now()
    
[/code]


CC BY-SA 4.0
2018-10-18T01:26:40.263
49400
2018-10-20T07:03:16.630
2018-10-20T07:03:16.630
15171
15171
49388
answer