【问题标题】:Reading data from files of varying length and varying columns从不同长度和不同列的文件中读取数据
【发布时间】:2015-02-04 17:43:12
【问题描述】:

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

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

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

典型的文件具有以下格式:

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 不起作用。我试图告诉它忽略每一行,直到它找到我想要的数据的特定数据类型标题,然后从那里提取,但我似乎无法弄清楚如何做到这一点。我尝试读取文件,为每一行分配一个索引,然后返回查找数据类型标头的索引并从那里开始,但也没有成功。

就像我之前的问题一样,这似乎是一个微不足道的问题,但我无法弄清楚。

感谢您的帮助。

【问题讨论】:

  • 你需要找出你想要提取的数据组的独特之处,一些定义特征告诉你“是的,这是组”,然后基本上匹配。否则恐怕你无能为力。

标签: python-2.7


【解决方案1】:

所以在更多阅读和尝试各种解决方案之后,我想出了一个相当不优雅的解决方案。

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 个文件耶!

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2018-02-04
    • 2014-07-27
    • 2015-03-04
    • 2018-06-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多