从不同长度和不同列的文件中读取数据

时间:2015-02-04 17:43:13

标签: python-2.7

我整个上午都在阅读stackoverflow问题,尝试不同的方法,没有进展。

我正在尝试自动化从318 qdp文件中读取数据的过程,以便绘制到图形上(以及其他一些内容)。我这样做而不使用qdp的原因是因为它对我正在尝试做的事情没有帮助。

qdp文件就像任何其他.txt文件一样,除了每行之后的\ n隐藏字符和每个数据条目之间的\ t,因此以pythonic方式读取它应该是直截了当的。但是文件格式令我头疼。

典型文件具有以下格式:

Header - 8 Lines
space
qdp code line       
datatype header      \ Data Group 
data column header   /     1
data - 6 columns    /
qdp code line       
datatype header      \ Data Group
data column header   /     2
data - 6 columns    /

这看起来很简单,但是每个文件都有不同数量的数据组(1到3之间),其中只有1个我想要提取。所以有时我想要的数据是第一组,有时它是第二组,有时在我想要的数据之后没有数据组,因此没有额外的qdp代码行。

每一行(数据除外)都有不同数量的列,因此np.genfromtxt不起作用。我已经尝试告诉它忽略每一行,直到它找到特定的数据类型标题,它头部我想要的数据,然后从那里提取,但我似乎无法弄清楚如何做到这一点。我试过读取文件,为每一行分配一个索引,然后返回查找数据类型标题的索引并从那里开始,但也没有成功。

像我以前的问题一样,它似乎是一个微不足道的问题,但我无法弄明白。

感谢帮助。

1 个答案:

答案 0 :(得分:0)

因此,经过更多阅读和尝试各种解决方案后,我提出了一个相当不优雅的解决方案。

with open(file, "r") as f:
    index = 0
    data_start = 0
    data_end = 0
    EOF = 0

    for line in f:
         temp = line.strip()
         datatemp.append(temp)

         if line.strip() == "datatype header":
             index += 1
             data_start = index + 2 

         elif line.strip() == "next datatype header":
             index += 1
             data_end = index - 3 

         else:
             index += 1

    if f.readline() = "":
        EOF = index

if data_end == 0:
    data_end = EOF

因此,在我想要提取的数据组之后存在数据组的情况下,它使用该组头指向要提取的数据的末尾,并且当我想要提取的数据组是最后一个组时在文件中,它使用EOF标记指向后面。

在此之后,我将datatemp分成6列,将每个列分配给一个列表。最后,我可以操作我想要的数据,程序会运行所有318个文件!

相关问题