我正在编写一个基本的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
任何人都可以帮助我解决此问题并发表评论,如何使我的代码更轻松,更快捷?
感谢您的帮助。
答案 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'])]