我整个上午都在阅读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不起作用。我已经尝试告诉它忽略每一行,直到它找到特定的数据类型标题,它头部我想要的数据,然后从那里提取,但我似乎无法弄清楚如何做到这一点。我试过读取文件,为每一行分配一个索引,然后返回查找数据类型标题的索引并从那里开始,但也没有成功。
像我以前的问题一样,它似乎是一个微不足道的问题,但我无法弄明白。
感谢帮助。
答案 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个文件!