python:读取和管理两个相关的输入文本文件

时间:2016-02-01 17:06:52

标签: python arrays list numpy

我有两个.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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我认为您的错误是由您获取和使用xy的方式造成的。

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]