Closed3
[Python] 変数の一覧を取得してファイルに書き出す
基本的にwho, who_ls, whosで取得できる。
a = 10000
b = 0.5
c = "text"
d = ["a", "b", "c"]
%who
a b c d
%who_ls
['a', 'b', 'c', 'd']
%whos
Variable Type Data/Info
-----------------------------
a int 10000
b float 0.5
c str text
d list n=3
whosでは、valueが長いと省略される。
e = "This is a so looooooooooooooooooooooooooooooooooooooooooooooooong text!"
%whos
Variable Type Data/Info
-----------------------------
e str This is a so looooooooooo<...>ooooooooooooooooong text!
これを防ぐには、who_lsで変数の一覧を取得して一つずつ取得する。
※以下ではevalを使用しているが、外部に公開する環境などではセキュリティ対策を行うこと。
a = 10000
b = 0.5
c = "text"
d = ["a", "b", "c"]
e = "This is a so looooooooooooooooooooooooooooooooooooooooooooooooong text!"
#変数の一覧を取得
vlist = %who_ls
#それぞれの変数で実行
for ev in vlist:
#変数名(str)
print(ev, end=' : ')
#変数の型(変数名がstrとなっているためevalでkeyに直す)
print(type(eval(ev)), end=' : ')
#変数の内容(変数名がstrとなっているためevalでkeyに直す)
print(eval(ev))
(以下出力)
a : <class 'int'> : 10000
b : <class 'float'> : 0.5
c : <class 'str'> : text
d : <class 'list'> : ['a', 'b', 'c']
e : <class 'str'> : This is a so looooooooooooooooooooooooooooooooooooooooooooooooong text!
Google Colaboratoryでは、以下のようにしてNotebook内の全変数を書き出してダウンロード出来る。
Notebookのデバッグに便利。
#ファイル名に現在時刻を含めるための準備
import datetime
jst_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(jst_delta, 'JST')
now = datetime.datetime.now(JST)
ntxt = str(now.strftime('%Y%m%d%H%M%S')) + ".txt"
#変数の値を取得
#whos使うと長い文字列が省略されるため、変数毎に取得する
##変数の一覧を取得
vlist = %who_ls
##それぞれの変数で実行
with open(ntxt, 'w') as f:
for ev in vlist:
#変数名(str)
print(ev, end=' : ', file=f)
#変数の型(変数名がstrとなっているためevalでkeyに直す)
print(type(eval(ev)), end=' : ', file=f)
#変数の内容(変数名がstrとなっているためevalでkeyに直す)
print(eval(ev), file=f)
#colabのfilesモジュールを使ってダウンロード
from google.colab import files
files.download(ntxt)
このスクラップは2022/12/28にクローズされました