我有两个.txt文件;一个表示我想要读取的向量(data.txt),另一个表示相应的坐标(coord.txt):浮点数表示的每行data.txt对应于x中coord.txt中的坐标线, Y,Z。
我想做几件事;首先,我想根据它们在coord.txt中的位置只复制指定的data.txt行。其次,在data.txt中,不需要所有零的每一行,因此我不想复制它(我需要考虑到coord.txt中指定的每一行的位置)。 例如data.txt:
0 0 0 0 0 0 0
1.2 3.4 5.6 4.4 2.0 4.5 1.1
2.3 4.5 6.1 3.3 2.3 6.5 7.1
3.4 2.2 5.1 4.3 3.3 6.5 8.0
1.1 2.6 7.2 1.9 7.9 9.4 3.7
0 0 0 0 0 0 0
2.3 5.6 4.1 6.8 9.3 2.5 7.5
1.1 4.5 3.2 5.7 8.5 3.5 5.4
coord.txt:
0 0 0
0 0 1
1 4 0
1 0 0
1 1 0
4 1 1
0 4 0
0 16 1
在这种情况下,不会复制data.txt的第一行(对于coord.txt中的相应位置,它是相同的)。此外,我想保存对应于具有x或y分量为4的倍数的坐标的向量(例如x或y = 0,4,8,12,16等......并且z可以是任何东西)。< / p>
def not_zeroes(arr):
return any([x!=0 for x in arr])
with open('data.txt') as data, open('coord.txt') as coordinates:
for x,y in izip(data, coordinates):
numbers= map(float,x.split())
positions =map(int, y.split())
if coord[y][0]%4==0 and coord[y][1]%4==0 and not_zeroes(numbers):
vectors.append(numbers)
coord.append(positions)
这是错误:TypeError: list indices must be integers, not str
有人可以帮助我吗?
答案 0 :(得分:0)
我认为您的错误是由您获取和使用x
和y
的方式造成的。
行for x,y in izip(data, coordinates):
可能将变量设置为字符串,因此它们不能用作以下行中的索引
if coord[y][0]%4==0 and coord[y][1]%4==0 and not_zeroes(numbers):
答案 1 :(得分:0)
我认为你犯了一些错误。您需要检查位置的第一个和第二个元素,而不是原始字符串。
def not_zeroes(arr):
return any([a != 0 for a in arr])
with open('data.txt', 'rb') as data, open('coord.txt', 'rb') as coordinates:
for x, y in zip(data, coordinates):
numbers = map(float, x.split())
positions = map(int, y.split())
if (positions[0] % 4 == 0 and positions[1] % 4 == 0) and not_zeroes(numbers):
vectors.append(numbers)
coord.append(positions)
如果运行你的例子,它将给出预期的结果:
[1.2, 3.4, 5.6, 4.4, 2.0, 4.5, 1.1] [0, 0, 1]
[2.3, 5.6, 4.1, 6.8, 9.3, 2.5, 7.5] [0, 4, 0]
[1.1, 4.5, 3.2, 5.7, 8.5, 3.5, 5.4] [0, 16, 1]