2015-11-05 118 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]] 
相关问题