0

明確にするために、参照しているデータの形式の例を含む要旨を作成しました。

https://gist.github.com/TestAcc7777/5823760

他の無関係なデータの後に、出力ファイルにはこれらの表形式のブロックが次々に含まれ、ヘッダー セクションが毎回繰り返されます。ヘッダーのインスタンスごとに最大 8 セットの読み取り値があり、これらを合わせて 1 つのブロックを構成します。ヘッダー内の数量の構成は、後続の測定値の構成を反映しています。

そのため、ヘッダーに指定されたいくつかの量の値を抽出し、それらを関連する量と共にファイルに配置し、matplotlib で量のセットと別のセットをプロットする必要があります。たとえば、eng_tot 対 time(ps)。

これは、Python または matplotlib を使用した私の経験から大きく外れているため、完全に失われているため、どんな助けも大歓迎です。

4

1 に答える 1

0

これは完全な答えではありませんが、開始する必要があります。

#!/bin/env python

import sys
import re
import pprint

# Some function that determines whether a line is a seperator
def is_sep(line):
    return (line.count('-') > 80)

# Some function that parses the "block"
def parse_block(lines):
    parsed_lines = []
    for line in lines:
        matches = re.findall('(\S+)', line)
        parsed_lines.append(matches)
    return parsed_lines

if __name__ == "__main__":
    # Read in data
    with open('data.txt', 'r') as fh:
        data = fh.read()

    # Split data into lines, then split the lines into "blocks"
    blocks = []
    block_lines = []
    for line in data.splitlines():
        if(is_sep(line)):
            blocks.append(block_lines)
            block_lines = []
        else:
            block_lines.append(line)

    # This splitting method will create an empty "block" as the first element of the list, delete it
    blocks = blocks[1:]

    # For all blocks but the header block, pass it to "parse_block"
    parsed_blocks = []
    for block in blocks[1:]:
        parsed_blocks.append(parse_block(block))

    pprint.pprint(parsed_blocks[0])

たとえば、データの最後のブロックは次のように解析されます。

[['1', '2.6814E+03', '3.3117E+02', '1.6616E+03', '-1.1814E+02', '1.8312E+03', '3.5247E+03', '2.5879E+02', '-3.8350E+03', '0.0000E+00'],
 ['0.0', '2.5785E+04', '6.8687E+01', '-6.7273E+04', '-7.6310E+03', '-1.8316E+03', '-5.7811E+04', '0.0000E+00', '0.0000E+00', '0.0000E+00'],
 ['4.9', '1.3300E+04', '0.0000E+00', '0.0000E+00', '0.0000E+00', '9.0000E+01', '9.0000E+01', '9.0000E+01', '0.0000E+00', '1.1911E+02'],
 [],
 ['rolling', '2.6814E+03', '3.3117E+02', '1.6616E+03', '-1.1814E+02', '1.8312E+03', '3.5247E+03', '2.5879E+02', '-3.8350E+03', '0.0000E+00'],
 ['averages', '2.5785E+04', '6.8687E+01', '-6.7273E+04', '-7.6310E+03', '-1.8316E+03', '-5.7811E+04', '0.0000E+00', '0.0000E+00', '0.0000E+00'],
 ['1.3300E+04', '0.0000E+00', '0.0000E+00', '0.0000E+00', '9.0000E+01', '9.0000E+01', '9.0000E+01', '0.0000E+00', '1.1911E+02']]
于 2013-06-20T16:41:41.527 に答える