2013-06-20 138 views
0

为了清楚的目的而列出的明文数据我已创建包含数据的格式的一个例子的要旨我指的是:提取并绘制使用Python 3

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

经过一些其他不相关的数据,输出文件包含许多这些表格块,一个接一个地排列,并且每次都重复标题部分。每个标题实例最多有8组读数,它们一起组成一个块。标题中数量的组织反映了后续读数值的组织。

鉴于这一点,我需要提取标题中给出的一些数量的值,将它们放入一个文件及其相关数量,并且让matplotlib绘制一组数量与另一组数量的关系。例如eng_tot与时间(ps)。

我完全失去了,因为这完全落在了我使用Python或matplotlib的经验之外,所以任何帮助都是值得欢迎的。

+0

我无法看到示例数据。它返回502坏的网关。 – falsetru

+0

你有没有尝试过吗? – jedwards

+0

@falsetru我不确定iink有什么问题,因为我已经确定它是公开的,它正在为我的工作做好准备。 – verdant

回答

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']] 
+0

谢谢!我已经掌握了这一点,并且看到它生成(对于所有数据)列表的列表。我怎样才能遍历这个来不断挑选出我想要的元素?从标题值可以看出我需要哪些,但我不知道如何表达。我还没有处理像这些先进的列表,我猜测'for'循环不会削减它。 – verdant