[英]Read .csv file with nested for loops, only getting last line
我試圖讀取.csv文件並創建一個浮點值的二維數組。 這是我到目前為止所做的:
import csv
filename = 'data_out.csv'
# create an array for the for the data
row_values = [None]*len(header)
all_values = []
reader = csv.reader(open(filename,'rt'),delimiter=',')
next(reader) #skip header line
for row in reader:
i=0
for item in row:
value = float(item)
row_values[i]=value
i=i+1
print(row_values)
all_values.append(row_values)
print(all_values)
print(row_values)看起來很有效。 每行都放入浮點值列表中。 但是當我打印(all_values)時,它不起作用。 我已經創建了一個列表列表(正確的行數),但它只是一遍又一遍重復的最后一行值。 也許我的.append()在錯誤的位置?
我應該說這是我第一次在python中編程,但我已經用C ++編程多年了。 任何幫助/提示將非常感激。 謝謝!
您只創建一個數組對象並將相同的數組對象附加到列表中。 所以只有最后一行在最終輸出中重復。
您應該在第一級循環中創建數組對象並將其附加到列表中。
問題是, all_values
被存儲到數組的引用 row_values
每次追加它的時候,而不是一個副本 。 因此, all_values
所有元素都是指向同一數組的引用,在每次迭代中,您將覆蓋row_values
中的值。
看到這個,例如:
b = []
a = [1, 2]
b.append(a)
print b
a[0] = 3
b.append(a)
print b
print id(b[0]), id(b[1])
這與您的程序具有相同的效果,它將為第二個print
語句打印[[3, 2], [3, 2]]
。 最后一個print
語句顯示b
中兩個值的id,它們是相同的,這意味着b中的兩個元素是相同的元素。
因此,循環的固定(和更多pythonic)版本將是:
reader = csv.reader(open(filename,'rt'),delimiter=',')
for row in reader:
row_values = [float(item) for item in row]
all_values.append(row_values)
print all_values
第三行使用列表all_values
將row
所有值轉換為浮點數並將它們存儲在一個新數組中,然后將其附加到all_values
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.