使用Python3提取和绘制列表明文数据

使用Python3提取和绘制列表明文数据,python,matplotlib,extract,scientific-computing,plaintext,Python,Matplotlib,Extract,Scientific Computing,Plaintext,为了清晰起见,我创建了一个要点,其中包含我所指的数据格式示例: 在一些其他不相关的数据之后,输出文件包含许多这样的列表块,一个接一个,每次都重复页眉部分。每个标头实例最多有八组读数,它们共同构成一个块。标题中的数量组织反映了后续读数的值组织 考虑到这一点,我需要提取标题中给出的一些数量的值,将它们与相关数量一起放在一个文件中,并让matplotlib绘制一组数量与另一组数量的对比。例如,工程量与时间(ps) 我完全不知所措,因为这远远超出了我使用Python或matplotlib的经验,所以欢

为了清晰起见,我创建了一个要点,其中包含我所指的数据格式示例:

在一些其他不相关的数据之后,输出文件包含许多这样的列表块,一个接一个,每次都重复页眉部分。每个标头实例最多有八组读数,它们共同构成一个块。标题中的数量组织反映了后续读数的值组织

考虑到这一点,我需要提取标题中给出的一些数量的值,将它们与相关数量一起放在一个文件中,并让matplotlib绘制一组数量与另一组数量的对比。例如,工程量与时间(ps)


我完全不知所措,因为这远远超出了我使用Python或matplotlib的经验,所以欢迎提供任何帮助。

这不是一个完整的答案,但应该让您开始学习

#!/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']]

我看不到示例数据。它返回502坏网关。你有任何尝试吗?@falsetru我不确定链接出了什么问题,因为我已经确定它是公开的,并且它在我这边工作。@jedwards我恐怕我还没有完全确定开始提取所需的逻辑。谢谢!我已经了解了这一点,并看到它生成了(所有数据)一个列表列表。我如何遍历它以始终选择我想要的元素?从标题值中,我可以看到我需要哪些,但我不知道如何表达。我还没有处理过像这些那样高级的列表,我猜“for”循环不会切断它。