读取字符串为整数? (Python 2.7)

时间:2017-01-21 21:04:42

标签: python excel python-2.7 csv

我是Python的新手,我只是在学习东西的时候。

我试图将数据从Excel文件导入我的Python程序。我需要能够在Python程序中使用这些数字进行简单的计算而不是Excel。这就是代码现在的样子:

    import csv
    with open ('vals.csv','rb') as csvfile:
        reader = csv.reader(csvfile)
        x = next(reader)
        y = next(reader)
        z = next(reader)

        print x[0]+z[2]
        print x[0]+1

第一个print语句应该给我7(因为第一个x是3,第三个z是4)。相反它打印34,所以我假设它不是将值视为整数?

第二个print语句导致此错误:

    TypeError: cannot concatenate 'str' and 'int' objects

基于此,我猜它将每行读作字符串而不是整数。我试着做下一件事,看看是否会把它转换成整数:

    x = next(reader)
    x = int(x)
    y = next(reader)
    y = int(y)
    z = next(reader)
    z = int(z)

但它给了我这个错误:

    TypeError: int() argument must be a string or a number, not 'list'

所以我猜它不是以字符串形式阅读它?

我只是想知道如何将它读取为x [0](以及其余所有其余部分)作为整数,以便我可以用它进行计算。

2 个答案:

答案 0 :(得分:0)

csv.reader模块在​​每次迭代时生成一个字符串行列表。

即使每行只有一列或者数据包含整数。

要获取每行的整数列表,请在列表解析中执行:

row1 = [int(x) for x in next(reader)]

或者因为它的python 2:

row1 = map(int,next(reader))

然后使用row1[2]以整数形式访问该行的第3个元素。

答案 1 :(得分:0)

csv.reader是一个可复制的lists个字符串,对应于行中的列:

x = next(reader)
# x: ['3', '4', '5']

如果所有值都可以转换为int,您可以执行以下操作:

x = map(int, x)
# x: [3, 4, 5]

否则,您必须单独转换字段:

x[0] = int(x[0])