簡體   English   中英

使用嵌套for循環讀取.csv文件,僅獲取最后一行

[英]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_valuesrow所有值轉換為浮點數並將它們存儲在一個數組中,然后將其附加到all_values

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM