从文件读取连续的三列到数组

时间:2018-12-31 08:04:43

标签: python python-3.x function

我正在编写一个基本的python程序,用于从文本文件中读取3D坐标并将其传递到数组中。 这是我的文本文件的一部分。

1              0.20069808    0.70680627    0.00000000
2              1.66069808    0.70680627    0.00000000
3              0.20069808    2.16680627    0.00000000
...

我一直在尝试自己,以下是我的实验

coord_raw = []
x = []
y = []
z = []

for line in f:
    lst = line.split()
    print(lst[1])
    x.append(lst[1])
    y.append(lst[2])
    z.append(lst[3])
    coord_raw.append((x, y, z))

    #coord_raw += [x, y, z]

我期望的是以下

[[0.20069808,0.70680627,0.00000000]
 [1.66069808,0.70680627,0.00000000]
 [0.20069808,2.16680627,0.00000000]
 ...                           ...]
 ...                           ...]]

但是,它显示了一个错误

     x.append(lst[1])
IndexError: list index out of range

任何人都可以帮助我解决此问题并发表评论,如何使我的代码更轻松,更快捷?
感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我认为您应该考虑使用numpy:

import numpy as np    
arr = np.loadtxt(filepath)
np.delete(arr, 0, 1) # deletes the first column of 0, 1, 2, 3

因为一个numpy数组将更容易处理数字数据

答案 1 :(得分:1)

最基本的解决方案是按以下方式阅读:

import csv

data = []
with open('input.csv') as f:
    for line in csv.reader(f, delimiter=' '):
        data.append(tuple(line))
print(data)

在输入文件上:

1,2,3
4,5,6
7,8,9

您将获得:

[(1,2,3)
 (4,5,6)
 (7,8,9)]

如果您使用数字: 最好的解决方案是使用numpy(不知道您的用法。)

答案 2 :(得分:0)

很奇怪,它没有对我抛出错误。这是我在运行代码时得到的结果(除非行名1, 2, 3...实际上不是文本文件中其自己的列)。

[(['0.20069808', '1.66069808', '0.20069808'],
  ['0.70680627', '0.70680627', '2.16680627'],
  ['0.00000000', '0.00000000', '0.00000000']),
 (['0.20069808', '1.66069808', '0.20069808'],
  ['0.70680627', '0.70680627', '2.16680627'],
  ['0.00000000', '0.00000000', '0.00000000']),
 (['0.20069808', '1.66069808', '0.20069808'],
  ['0.70680627', '0.70680627', '2.16680627'],
  ['0.00000000', '0.00000000', '0.00000000'])]