物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
pythonで解析をして、それのログファイルを残したい
単純なログファイルなら、必要な情報を書いてテキストファイルにしておけば良い
今回はそのログファイルをwebページ(html+javascript)で読み込んで、ページに要素として並べたい
なので、ログファイルの形式はcsvかjsonか、または直接javascriptの形式にして書き出すかに絞られる
csvはpythonで入出力の関数がそれなりに用意されているので簡単な気がするが、
今回はjson形式で読み書きすることにする
pythonでのjson形式の読み書きのほぼ全ては以下のページにまとめられている
とりあえずこれを上から読んで実行していけばOK
■ 参考 : PythonでJSONファイル・文字列の読み込み・書き込み
それをpythonコードに直したのが以下
(該当箇所だけ抜き出してる)
道中で使った辞書のkey(リストと考えて良い)の並び替えについて
sort()は破壊的(すでにあるリストの順番を書き換えてしまう)
sorted()は非破壊的(並び替えたリストを返す)
■ 参考 : Pythonの辞書のリストを並び替える
作成したJSONファイルをhtmlとjavascriptで取り回す方は別記事にまとめた
■ 参考 : 【javascript】JSONファイルを読み込みたい
ツイート
単純なログファイルなら、必要な情報を書いてテキストファイルにしておけば良い
今回はそのログファイルをwebページ(html+javascript)で読み込んで、ページに要素として並べたい
なので、ログファイルの形式はcsvかjsonか、または直接javascriptの形式にして書き出すかに絞られる
csvはpythonで入出力の関数がそれなりに用意されているので簡単な気がするが、
今回はjson形式で読み書きすることにする
pythonでのjson形式の読み書きのほぼ全ては以下のページにまとめられている
とりあえずこれを上から読んで実行していけばOK
■ 参考 : PythonでJSONファイル・文字列の読み込み・書き込み
それをpythonコードに直したのが以下
(該当箇所だけ抜き出してる)
import json
from datetime import datetime, timedelta
(略)
JST_beg = UTC_beg+ timedelta(hours=+9)
JST_end = UTC_end + timedelta(hours=+9)
today = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 空の辞書型を作成
# dfに既存のjsonファイルを開く、dnewにdfの先頭15個と最新の結果をまとめる
df = {}
dnew = {}
# json_fnameはPATH+出力ファイル名
json_fname = outdir + "log.json"
# 既存のjsonファイルを開いてdfに代入
with open(json_fname, 'r') as file:
try:
df = json.load(file)
#print(df)
file.close()
except Exception as e:
print(e)
# 既存のjsonの最新から15件のみ残す
# 「Python3.6までは言語仕様として辞書(dict型オブジェクト)は要素の順序を保持していない」
# と↑の記事にあったが、今使ってるpythonは3.7なので今は気にしなくて良い
# keyは実行時の日付+時間が入っているのでそれで逆順にソートすれば最新のものから取得可
dfkeys = sorted(df.keys(), reverse=True)[0:15]
# 辞書型の要素のうち一番最新の要素のindexを取り出して、そこから今加える最新の結果のindexを作る
# ここでindexは通し番号相当
index = df[dfkeys[0]]["index"] + 1 # compute the current index
# 古い辞書型に新しい要素を加えると、一番うしろに入ると思ったので
# 別の辞書を用意してそれの先頭に要素を加える
dnew["%s" % today] = { "index": index,
"date_beg" : "%d-%02d-%02d" % (JST_beg.year, JST_beg.month, JST_beg.day),
"hour_beg" : JST_beg.hour,
"minute_beg" : "%d" % JST_beg.minute,
"second_beg" : "%d" % JST_beg.second,
"date_end" : "%d-%02d-%02d" % (JST_end.year, JST_end.month, JST_end.day),
"hour_end" : "%d" % JST_end.hour,
"minute_end" : "%d" % JST_end.minute,
"second_end" : "%d" % JST_end.second,
"gps_beg" : start_gpstime,
"gps_end" : end_gpstime
}
# 新しい辞書の後ろに、既存の辞書型を加える
for key in dfkeys:
dnew[key] = df[key]
# 最後に最初に読み込んだ既存のjsonファイルと同名でファイルを開いて、そこに出力する
# 要するに上書き保存
with open(json_fname, 'w') as file:
json.dump(dnew, file, indent=2)
file.close()
from datetime import datetime, timedelta
(略)
JST_beg = UTC_beg+ timedelta(hours=+9)
JST_end = UTC_end + timedelta(hours=+9)
today = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 空の辞書型を作成
# dfに既存のjsonファイルを開く、dnewにdfの先頭15個と最新の結果をまとめる
df = {}
dnew = {}
# json_fnameはPATH+出力ファイル名
json_fname = outdir + "log.json"
# 既存のjsonファイルを開いてdfに代入
with open(json_fname, 'r') as file:
try:
df = json.load(file)
#print(df)
file.close()
except Exception as e:
print(e)
# 既存のjsonの最新から15件のみ残す
# 「Python3.6までは言語仕様として辞書(dict型オブジェクト)は要素の順序を保持していない」
# と↑の記事にあったが、今使ってるpythonは3.7なので今は気にしなくて良い
# keyは実行時の日付+時間が入っているのでそれで逆順にソートすれば最新のものから取得可
dfkeys = sorted(df.keys(), reverse=True)[0:15]
# 辞書型の要素のうち一番最新の要素のindexを取り出して、そこから今加える最新の結果のindexを作る
# ここでindexは通し番号相当
index = df[dfkeys[0]]["index"] + 1 # compute the current index
# 古い辞書型に新しい要素を加えると、一番うしろに入ると思ったので
# 別の辞書を用意してそれの先頭に要素を加える
dnew["%s" % today] = { "index": index,
"date_beg" : "%d-%02d-%02d" % (JST_beg.year, JST_beg.month, JST_beg.day),
"hour_beg" : JST_beg.hour,
"minute_beg" : "%d" % JST_beg.minute,
"second_beg" : "%d" % JST_beg.second,
"date_end" : "%d-%02d-%02d" % (JST_end.year, JST_end.month, JST_end.day),
"hour_end" : "%d" % JST_end.hour,
"minute_end" : "%d" % JST_end.minute,
"second_end" : "%d" % JST_end.second,
"gps_beg" : start_gpstime,
"gps_end" : end_gpstime
}
# 新しい辞書の後ろに、既存の辞書型を加える
for key in dfkeys:
dnew[key] = df[key]
# 最後に最初に読み込んだ既存のjsonファイルと同名でファイルを開いて、そこに出力する
# 要するに上書き保存
with open(json_fname, 'w') as file:
json.dump(dnew, file, indent=2)
file.close()
道中で使った辞書のkey(リストと考えて良い)の並び替えについて
sort()は破壊的(すでにあるリストの順番を書き換えてしまう)
sorted()は非破壊的(並び替えたリストを返す)
■ 参考 : Pythonの辞書のリストを並び替える
作成したJSONファイルをhtmlとjavascriptで取り回す方は別記事にまとめた
■ 参考 : 【javascript】JSONファイルを読み込みたい
PR
この記事にコメントする
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
職業:物理屋
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
カテゴリー
ブログ内検索
リンク
相互リンク募集中です
(Twitterにてお知らせください)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
最新記事
(11/20)
(05/09)
(03/05)
(02/29)
(02/21)
(02/21)
(02/21)
(02/21)
(01/13)
(01/05)