如何导入具有所需结构的.txt文件

时间:2019-01-02 21:36:57

标签: python pandas numpy text

我需要导入一个txt文件,该文件应该是X行,每行18列,但实际上是这样的(即使每13列都看不到它,所以开始的一行只有5个元素)

2.0462020e + 001 2.9598587e + 001 2.8684617e + 001 1.2745371e + 001 2.3967345e + 001 2.4593504e + 001 1.2683864e + 001 3.1394543e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000

8.8575460e-001 1.0210176e + 000 1.2740904e + 000 1.3526302e + 000 1.4878932e + 000 1.8107791e + 000 1.9067722e + 000 2.8143434e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000 0.0000000e + 000

通话feat = np.loadtxt(x) 返回一个奇怪的维数(3,602014),例如,如果我分析第0行,则它开始如下: 1.0 20.46 29.58 28.68 12.74 23.96 24.59 12.683.12 2.0 20.46 29.58 ... 就像结果的第一行一样,我得到了真实数据集0,3,6,9,12的所有非0值... 在第2n行中,我将具有相同的内容,但对于原始行1,4,7,...,同样,结构是相同的,从第1行的1.0 + values!= 0开头+ 2.0 + values!=第4行。

正如我所说,我想获得一个尺寸为(X,18)的数组,而不会出现1.0和2.0,其中X只是原始文件应该具有的行数(每18列新行)

可以在https://github.com/OpenSLAM-org/openslam_ufastslam/blob/master/code/victoria_park/landmark.txt

中下载文件

2 个答案:

答案 0 :(得分:1)

您的文本文件只有4行,成千上万列。我认为,如果我们读入整个文件并摆脱换行符,我们可以创建一个值列表。

然后我们可以创建一个numpy数组并重新对其进行格式化。

import numpy as np
with open('landmark.txt', 'r') as myfile:
    data=myfile.read().replace('\n', '').split()

my_data = np.array(data).reshape((int(len(data)/18), 18))

答案 1 :(得分:0)

有了genfromtxt(或loadtxt),我得到:

In [64]: data = np.genfromtxt('../Downloads/landmark.txt')
In [65]: data.shape
Out[65]: (3, 60204)
In [66]: data.dtype
Out[66]: dtype('float64')
In [67]: data[0,:10]
Out[67]: 
array([ 1.       , 20.46202  , 29.598587 , 28.684617 , 12.745371 ,
       23.967345 , 24.593504 , 12.683864 ,  3.1394543,  2.       ])
In [68]: data[1,:10]
Out[68]: 
array([1.       , 0.8857546, 1.0210176, 1.2740904, 1.3526302, 1.4878932,
       1.8107791, 1.9067722, 2.8143434, 2.       ])

这与在文本编辑器中查看文件时看到的内容相符-3行多列。

data.reshape(-1,18)生成一个包含(10034, 18)的数组。我们可以删除开头的1.000,但那样会使整形混乱(不超过18的倍数)。