即使在评论中,Python也会收到无效错误

时间:2014-05-22 11:55:21

标签: python csv

我想读一个包含两列的.csv文件。前者代表索引名称,后者代表相应的供应。然后我想将供应与alpha列表中表示的一些权重相乘。但是我收到错误

 Can't multiply sequence by non-int of type 'float' 

在我调用writer.write的行中。

从我从谷歌上搜索到的,这是因为,例如,[5] * 3创建了一个包含值为5的3个元素的列表,这是我不想要的。我已经看到其他人通过循环解决了它,在这个例子中,我在alpha中。除了以这种方式做到这一点之外还有其他方法,或者当我在每次迭代中只对一个值不感兴趣时​​,我现在如何做到这一点,我同时对它们感兴趣。

我的代码如下:

#! /usr/bin/python
import csv
import math

writer = open("C:\\Users\\Guda\\Documents\\manipulerat3.csv", "w")
alpha = [0.16,0.13,0.13,0.20]

with open("C:\\Users\\Guda\\Documents\\manipulerat2.csv", "r") as f:
    reader = csv.reader(f, delimiter ="\t")
    for row in reader:
        a = float(row[1])
        a = int(math.ceil(a))
        writer.write("%s\t\%s\t%s\%s\t%s\n" % (row[0],alpha[0]*a,alpha[1]*a,alpha[2]*a, alpha*alpha[3]))

2 个答案:

答案 0 :(得分:1)

尝试writer.write("%s\t\%s\t%s\%s\t%s\n" % (row[0],alpha[0]*a,alpha[1]*a,alpha[2]*a, alpha[3]*a))

你的代码中有一个拼写错误,导致列表alpha与alpha [3]相乘。由于alpha [3]是一个浮点数,因此你得到了错误。

答案 1 :(得分:1)

看起来你想在alpha*alpha[3]中实现的是通过第四个元素将所有元素复用。它还看起来像你想在最后将这个结果输出为一个字符串(我假设以制表符分隔)。如果是这种情况,那么您可能想要放置alpha*alpha[3]

"\t".join(str(val * alpha[3]) for val in alpha)