[Python]openしているファイルオブジェクトのファイル名を取得する
小ネタです。
ファイルを扱う処理で、ファイル名によって分岐させたいときがありました。
結論から言うとファイルオブジェクトのname
メンバにアクセスすれば取得できます。
具体的には、
filepath = 'xxx' with open(filepath, 'r') as fr: do_something(fr) def do_something(f): # なにか処理 pass
上記でなにか処理しているdo_something()の中でファイル名が知りたいとき、
fr.name
であっさり取得できます。
> fp = 'wine.csv' > d = open(fp, 'r') > d.name 'wine.csv'
pathlibのopenでも同様です。
> import pathlib > fp = 'wiine.csv' > d = pathlib.Path(fp) > f_obj = d.open() > f_obj.name 'wine.csv'
Contents
サンプルコード
※同ディレクトリにwine.csv
というファイルがある想定です。
import pathlib
def do_something(f_obj):
print('filepath is:', f_obj.name)
for line in f_obj:
print(line)
filepath = 'wine.csv'
# 組み込み関数
with open(filepath, 'r') as fr:
print('組み込み関数 open():')
do_something(fr)
# pathlib版
p_obj = pathlib.Path(filepath)
with p_obj.open() as f:
print('Pathlib open():')
do_something(f)
実行結果
組み込み関数 open():
filepath is: wine.csv
"","OBS","VINT","LPRICE2","WRAIN","DEGREES","HRAIN","TIME_SV"
"1",1,1952,-0.99868,600,17.1167,160,31
"2",2,1953,-0.4544,690,16.7333,80,30
"3",3,1954,NA,430,15.3833,180,29
... (省略)
Pathlib open():
filepath is: wine.csv
"","OBS","VINT","LPRICE2","WRAIN","DEGREES","HRAIN","TIME_SV"
"1",1,1952,-0.99868,600,17.1167,160,31
"2",2,1953,-0.4544,690,16.7333,80,30
"3",3,1954,NA,430,15.3833,180,29
... (省略)
まとめ
当たり前かもしれませんが便利です。
知らずに自前で引数渡すことになりかねなかったので、助かりました。
ディスカッション
コメント一覧
まだ、コメントがありません