2015-04-06 25 views
0

以下是代码,我试图逐行读取一个文件并相应地将值写入数组,但是,当我打印感应时,它确实包含很多元素,但它们的值是最后的修剪。Python将文件读入数组,错误值

sensing = [] 
with open("data.txt") as data: 
    for line in data:   
     strline = line.strip() 
     if(strline[1] =='['): 
      trimmed[0] = int(strline[2:5]) 
      trimmed[1] = int(strline[7:10]) 
     else: 
      trimmed[0] = int(strline[1:4]) 
      trimmed[1] = int(strline[6:9]) 
     **sensing.append(trimmed)** 

data.txt中:[592,180],[583,189],[576,197],[569,205],[560,214],[551,225],

感应:[[551,225],[551,225],[551,225],[551,225],[551,225],[551,225]]

我想要的: [[592,180],[583,189],[576,197],[569,205],[560,214],[551,225]]

+1

你首先在哪里定义“修剪”变量?它不在该代码中。 – NotNotLogical 2015-04-06 04:08:02

+0

列表是可变的,所以如果你在这个循环的外部定义了修剪并重用它,你将得到你所概述的结果...在循环内移动。 – AChampion 2015-04-06 04:23:43

回答

0

这里的问题几乎肯定与参考有关。 Python中的列表(和大多数对象)保存在引用变量中。感应中的每个列表都指向您调用的内存中的一个列表。当您修改完毕后,感应中的所有子列表都会更新,因为它们都指向那个列表。

您也需要重新定义通过循环修整每次迭代(与trimmed = [None, None]),或者你可以只直接追加到检测列表的东西,如sensing[-1].append(element)sensing.append([])添加一个新的列表。

+0

非常感谢您的解释。 – Ryan 2015-04-06 04:26:04

0

假设一个线路输入的是:[592,180],[583,189],[576,197],[569,205],[560,214],[551,225]

sensing = [] 
with open("data.txt") as data: 
    for line in data: 
     sendsing = [map(int, i.split(", ")) for i in line.strip()[1:-1].split("],[")]