在使用Python进行数据导入之前,先从具有说明和列标题的txt文件导入数字数据

时间:2019-05-10 13:47:30

标签: python

我想在极坐标图中绘制一些数据,并且如果我从其中包含任何标题或文本的简单txt文件中导入数据,我编写的代码非常有用。 问题是我从自动设备获取数据的格式如下:

Hello word      
Hi Again        
Angle [deg] Level of radiation
-180    -1
-175    -8.17
-170    -15
-165    -13.67

目前,我使用以下代码导入数据,但是如果有文本或标题不起作用:

for line in open(Data.txt, 'r'):
  values = [float(s) for s in line.split()]
  Position.append(values[0])
  Level.append(values[1])
  NormalizedLevel.append(values[2])

我的目标是将前两行存储为要在绘图中显示的文本,然后将后三列存储在三个不同的数组中。如果可能的话,每个数组的名称应该是列的标题,但是如果不可能的话,这不是大问题!

有什么想法吗?预先感谢!

2 个答案:

答案 0 :(得分:1)

跳过标题。如果您知道标题中有几行,则可以执行以下操作:

with open('Data.txt', 'r') as ff:
    lines = ff.readlines()
    for ll in lines[3:] #if you have 3 lines of header as in your example
        values = [float(s) for s in ll.split()]
        Position.append(values[0])
        Level.append(values[1])
        NormalizedLevel.append(values[2])

您可以从lines[:3](在这种情况下)获取标头以供以后使用。这是列表。

编辑

如果您不知道标题行的数量,可以使用以下代码:

header = []
with open('data.txt', 'r') as ff:
    lines = ff.readlines()

    for ll in lines:
        try:
            values = [float(s) for s in ll.split()]
            Position.append(values[0])
            Level.append(values[1])
            NormalizedLevel.append(values[2])
        except ValueError:
            header.append(ll)

基本上,您尝试分割字符串并将列表的条目转换为浮点型。如果出现问题,则会引发ValueError异常。该代码假定该行是标题行,并将其存储在适当的列表中。
由于您要处理的是可变格式,因此我认为这是最好的选择。

答案 1 :(得分:1)

在标题行数可变的情况下,您需要首先计算您拥有的numberOfHeaderLines。一旦知道了这一点,就可以使用数组切片来提取其余数据。

with open('Data.txt', 'r') as file:
    lines = file.readlines()

    numberOfHeaderLines = 0
    for line in lines
        values = lines.split()

        # perhaps store your header data somewhere

        if (values[0].isdigit())
            break; # exit this loop now we know we're at a data row
        numberOfHeaderLines++ # increment

    for line in lines[numberOfHeaderLines:] 
        values = [float(s) for s in lines.split()]
        Position.append(values[0])
        Level.append(values[1])
        NormalizedLevel.append(values[2])

可能有更简洁的方法来执行此操作,但是(1)我不是Python专家,并且(2)如果您是编程新手,那么了解这样的基本方法很重要,因为这些基本方法与语言无关