2015-11-05 119 views
1

打開CSV文件時,整數列將被轉換爲字符串值('1','23'等)。通過循環將其轉換回整數的最佳方式是什麼?如何在讀取CSV文件時將字符串值轉換爲整數值?

import csv 

with open('C:/Python27/testweight.csv', 'rb') as f: 
    reader = csv.reader(f) 
    rows = [row for row in reader if row[1] > 's'] 

for row in rows: 
    print row 

CSV文件如下:

Account Value 
ABC  6 
DEF  3 
GHI  4 
JKL  7 
+2

一個小問題:CSV文件是文本文件,所以認爲整數傳遞到字符串是錯誤的。他們已經是字符串。您遇到的問題是您希望將它們轉換爲整數。 –

回答

2

我想這你想要做什麼:

import csv 

with open('C:/Python27/testweight.csv', 'rb') as f: 
    reader = csv.reader(f, delimiter='\t') 
    header = next(reader) 
    rows = [header] + [[row[0], int(row[1])] for row in reader] 

for row in rows: 
    print row 

輸出:

['Account', 'Value'] 
['ABC', 6] 
['DEF', 3] 
['GHI', 4] 
['JKL', 7] 
+0

謝謝,但這是給我「IndexError:列表索引超出範圍」 – JSmooth

+0

我必須指定的範圍,如果是的話,在哪裏? – JSmooth

+0

聽起來像真正的.CSV文件中的某些行不包含兩個值。如果是這樣的話,你可以通過將列表理解的結束改爲'... for read in len if len(row)> 1]'來跳過它們。 – martineau

1

如果CSV有頭,我建議使用CSV.DictReader。隨着代言人,你可以:

with open('C:/Python27/testweight.csv', 'rb') as f: 
    reader = csv.DictReader(f) 
    for row in reader: 
     integer = int(row['column that contains an int']) 

希望這有助於!

+0

謝謝,但我得到一個KeyError:1 – JSmooth

+0

這意味着在csv中有一個錯誤,你會介意發送一個頭部的csv的一小部分? –

+0

我把它放在原來的問題 – JSmooth

0

你可以只遍歷所有的行如下:

import csv 

with open('C:/Python27/testweight.csv', 'rb') as f: 
    reader = csv.reader(f) 
    rows = [row for row in reader if row[1] > `s`] 

for index, cols in enumerate(rows[1:], 1): # Skip the header row 
    rows[index][1] = int(cols[1]) 

print rows 

這將顯示:

[['Account', 'Value'], ['ABC', 6], ['DEF', 3], ['GHI', 4], ['JKL', 7]] 
相關問題