首页 > 解决方案 > 如何导入具有所需结构的 .txt 文件

问题描述

我需要导入一个 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 +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.906772E +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 值 ...结构相同,从 1.0 + values!=0 of 1st line + 2.0 + values!= 4th line 开始。

正如我所说,我想获得一个维度数组 (X, 18) 没有出现的 1.0 和 2.0 并且 X 只是原始文件应该具有的行数(每 18 列一个新行)

该文件可以在https://github.com/OpenSLAM-org/openslam_ufastslam/blob/master/code/victoria_park/landmark.txt下载

标签: pythonpandasnumpytext

解决方案


您的文本文件只有 4 行长,有数千列。我认为如果我们读入整个文件并去掉换行符,我们可以创建一个值列表。

然后我们可以把它变成一个 numpy 数组并 rehsape 。

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))

推荐阅读