我想读一个包含两列的.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]))
答案 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)