logファイルから情報を抽出して他のファイルに出力する
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 7,127
あるソフトを使いシミュレーションをしています.そのシミュレーションではlogファイルが生成され,各時刻と平均の物理量の値が記述されています.(ここでは,logファイルのStep10000000と平均の物理量の出力を示します)
Step Time Lambda
10000000 20000.00000 0.00000
Energies (kJ/mol)
Angle Ryckaert-Bell. LJ-14 Coulomb-14 LJ (SR)
1.74534e+03 1.21686e+03 3.31581e+02 5.58629e+03 1.95751e+04
Coulomb (SR) Coul. recip. Potential Kinetic En. Total Energy
-1.68797e+05 3.03112e+03 -1.37311e+05 4.78316e+04 -8.94791e+04
Temperature Pressure (bar) Constr. rmsd
4.69443e+02 1.19866e+02 6.22376e-06
<====== ############### ==>
<==== A V E R A G E S ====>
<== ############### ======>
Statistics over 10000001 steps using 100001 frames
Energies (kJ/mol)
Angle Ryckaert-Bell. LJ-14 Coulomb-14 LJ (SR)
1.77635e+03 1.05064e+03 2.98819e+02 5.73837e+03 1.94332e+04
Coulomb (SR) Coul. recip. Potential Kinetic En. Total Energy
-1.68899e+05 3.05330e+03 -1.37548e+05 4.82052e+04 -8.93433e+04
Temperature Pressure (bar) Constr. rmsd
4.73109e+02 1.53707e+01 0.00000e+00
Box-X Box-Y Box-Z
5.25862e+00 5.25862e+00 5.25862e+00
ここで,平均(averages)のTemperature,Pressure(bar),Box-Xの値を抽出したいのですが,どのようにできるでしょうか?
python(かawk)でのやり方を教えて頂けると嬉しいです.
概略だけでも教えて頂けると嬉しいです.(正規表現は勉強中です)
簡単すぎる質問でしたら申し訳ないです.
pythonでと書いたのは,pythonを覚えていこうと思い,使いながら覚えていきたいと思ったからです.
よろしくお願いします.
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
ログファイルが想定してものであれば、こんな感じで取り出せます。
import os
mypath = os.getcwd()
f = open(os.path.join(mypath,"log.txt"),"r")
mytxt = []
myflag = 0
# avereage 以下の行をリストにする
for line in f:
if "A V E R A G E S" in line:
print line
myflag = 1
if myflag == 1:
mytxt.append(line)
# 行数と内容をプリント
for i,line in enumerate(mytxt):
print i, line
#ほしいデータは11,14行目にあるので、スプリットして取り出す。データは文字列。
print "Temperature: ",mytxt[11].split()[0]
print "Pressure(bar): ",mytxt[11].split()[1]
print "Box-X: ",mytxt[14].split()[0]
# Temperature と Box-Xの位置を調べ、次の行をスプリットしてデータを取り出す。
j = 0
k = 0
for i,line in enumerate(mytxt):
if "Temperature" in line:
j = i
if "Box-X" in line:
k = i
if i == j + 1:
temperature = line.split()[0]
pressure = line.split()[1]
if i == k + 1:
box_x = line.split()[0]
# floatに変換してプリント
print float(temperature),float(pressure),float(box_x)
結果
Temperature: 4.73109e+02
Pressure(bar): 1.53707e+01
Box-X: 5.25862e+00
473.109 15.3707 5.25862
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
2016/06/02 15:59
こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
lightson
2016/06/02 18:23
1.ログファイルは一つのファイルの中で、上の内容が繰り返されるのでしょうか。それともこの内容のファイルがたくさんできるのでしょうか。
2.ログファイルの内容は、空白やタブ、改行なども上のものと同じと考えていいですか。
spectrum
2016/06/02 19:30
ありがとうございます.1.はい.step1からstep10000000まで同じファイルの中に上から順番に記録され,最後にAVERAGEが現れます.
2.はい.空白タブ改行は,上のものと全く同じです.
自分で考えたことが少なすぎました.申し訳ないです.
lightson
2016/06/02 19:38
データはたくさんありますが、 それは無視して
平均(averages)のTemperature,Pressure(bar),Box-X を取ればいいのですか?
spectrum
2016/06/03 10:48
おっしゃる通り,平均(averages)のTemperature,Pressure(bar),Box-Xを取得したいです.
返事遅れてすみません