Closed3

[Python] 変数の一覧を取得してファイルに書き出す

Srgr0Srgr0

基本的に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
Srgr0Srgr0

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!
Srgr0Srgr0

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にクローズされました