質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

10137閲覧

logファイルから情報を抽出して他のファイルに出力する

spectrum

総合スコア44

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/06/02 06:38

あるソフトを使いシミュレーションをしています.そのシミュレーションでは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を覚えていこうと思い,使いながら覚えていきたいと思ったからです.
よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lightson

2016/06/02 09:23

1.ログファイルは一つのファイルの中で、上の内容が繰り返されるのでしょうか。それともこの内容のファイルがたくさんできるのでしょうか。 2.ログファイルの内容は、空白やタブ、改行なども上のものと同じと考えていいですか。
spectrum

2016/06/02 10:30

ありがとうございます.1.はい.step1からstep10000000まで同じファイルの中に上から順番に記録され,最後にAVERAGEが現れます. 2.はい.空白タブ改行は,上のものと全く同じです. 自分で考えたことが少なすぎました.申し訳ないです.
lightson

2016/06/02 10:38

データはたくさんありますが、 それは無視して 平均(averages)のTemperature,Pressure(bar),Box-X を取ればいいのですか?
spectrum

2016/06/03 01:48

おっしゃる通り,平均(averages)のTemperature,Pressure(bar),Box-Xを取得したいです. 返事遅れてすみません
guest

回答1

0

ベストアンサー

ログファイルが想定してものであれば、こんな感じで取り出せます。

python

1import os 2 3mypath = os.getcwd() 4f = open(os.path.join(mypath,"log.txt"),"r") 5mytxt = [] 6myflag = 0 7# avereage 以下の行をリストにする 8for line in f: 9 if "A V E R A G E S" in line: 10 print line 11 myflag = 1 12 if myflag == 1: 13 mytxt.append(line) 14 15# 行数と内容をプリント 16for i,line in enumerate(mytxt): 17 print i, line 18 19#ほしいデータは11,14行目にあるので、スプリットして取り出す。データは文字列。 20print "Temperature: ",mytxt[11].split()[0] 21print "Pressure(bar): ",mytxt[11].split()[1] 22print "Box-X: ",mytxt[14].split()[0] 23 24 25# Temperature と Box-Xの位置を調べ、次の行をスプリットしてデータを取り出す。 26j = 0 27k = 0 28for i,line in enumerate(mytxt): 29 if "Temperature" in line: 30 j = i 31 if "Box-X" in line: 32 k = i 33 if i == j + 1: 34 temperature = line.split()[0] 35 pressure = line.split()[1] 36 if i == k + 1: 37 box_x = line.split()[0] 38# floatに変換してプリント 39print float(temperature),float(pressure),float(box_x) 40 41結果 42Temperature: 4.73109e+02 43Pressure(bar): 1.53707e+01 44Box-X: 5.25862e+00 45473.109 15.3707 5.25862

投稿2016/06/02 11:55

lightson

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spectrum

2016/06/03 01:47

ありがとうございます. 丸投げしてすみませんでした. ここから学べることがとてもたくさんあるので(AVERAGE以下からの始め方,スプリットの仕方,データをfloatに変換すること),学び,考えられるようになって出直してきます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問