【问题标题】:Read string as integers? (Python 2.7)将字符串读取为整数? (Python 2.7)
【发布时间】:2017-01-21 21:04:42
【问题描述】:

我是 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

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

第二个打印语句导致此错误:

    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] (以及所有其余的)这样的整数读取,以便我可以用它进行计算。

【问题讨论】:

标签: python excel python-2.7 csv


【解决方案1】:

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

也就是说,即使每行只有一列,或者数据包含整数。

要获得每行的整数列表,请在列表推导中执行:

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

或者因为它是python 2:

row1 = map(int,next(reader))

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

【讨论】:

    【解决方案2】:

    csv.readerlists 字符串的可迭代对象,该字符串对应于行中的列:

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

    如果所有值都可以转换为int,你可以这样做:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2014-05-05
      • 2020-01-06
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多