加载txt文件时跳过第一行和每第n行(Python)

时间:2017-03-20 01:23:04

标签: python numpy

所以我在.txt文件中有一些如下所示的数据:

"CLUSTER" "observed" "metric" "structure" "patID"
"1" 1 5.56802742675389 "V50GY" "Wall" "Generic-420-Wall-70"
"2" 1 3.04813846733667 "V70GY" "Wall" "Generic-420-Wall-70"
"3" 2 5.67825143127034 "V50GY" "Wall" "Generic-420-Wall-72"
"4" 2 3.05994158400609 "V70GY" "Wall" "Generic-420-Wall-72"
"5" 3 5.89519521321811 "V50GY" "Wall" "Generic-420-Wall-74"
"6" 3 3.12327777559325 "V70GY" "Wall" "Generic-420-Wall-74"
"7" 4 5.95329849423797 "V50GY" "Wall" "Generic-420-Wall-76"
"8" 4 3.23398452311885 "V70GY" "Wall" "Generic-420-Wall-76"
"9" 5 5.98067106255001 "V50GY" "Wall" "Generic-420-Wall-78"
"10" 5 3.36621440490947 "V70GY" "Wall" "Generic-420-Wall-78"

我还有一些数据显示metric列中没有任何更改,因此整个列中只有metric。现在,要从中提取数据,我使用以下代码来获取小数值:

y = np.loadtxt('file.txt), skiprows=1, usecols=(2,))

然后使用该数据进行绘图。

但是在我附加的数据的情况下,我只需要在第一个跳过的行之后的每个第二行数据,即(1,3,5,7,9)第一个具有五个x值的图,前两条跳过的线后面的每一条第二行数据,即(2,4,6,8,10),第二条图也有五个x值。

但我真的不知道该怎么做。甚至可以使用np.loadtxt函数吗?

1 个答案:

答案 0 :(得分:1)

In [296]: y = np.loadtxt(txt.splitlines(), skiprows=1, usecols=(2,))
In [297]: y
Out[297]: 
array([ 5.56802743,  3.04813847,  5.67825143,  3.05994158,  5.89519521,
        3.12327778,  5.95329849,  3.23398452,  5.98067106,  3.3662144 ])

随着你的负载,我得到一个值的数组

正常切片可以给我其他所有值

In [298]: y[::2]
Out[298]: array([ 5.56802743,  5.67825143,  5.89519521,  5.95329849,  5.98067106])
In [299]: y[1::2]
Out[299]: array([ 3.04813847,  3.05994158,  3.12327778,  3.23398452,  3.3662144 ])

您还可以使用此答案中描述的过滤器https://stackoverflow.com/a/13893642/901925来跳过文本中的行。但是,当某些行不能/不应该加载时,该方法更有用。这里可以加载所有行,因此在加载后更容易选择它们。