2015-04-06 49 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("],[")]