将文件中的每一列分配为变量以在带有 for 循环的函数中使用

Assigning each column in a file as a variable to use in a function with a for loop

我正在尝试将文件中的每一列(3 列,20 多行)分配为要在已定义函数中使用的变量。该函数只是将每一行的每一列的三个值相乘。我尝试使用如下所示的字典方法,但它不起作用。预期的结果是 for 循环到 运行 通过函数的每一行并为每一行打印一条语句;例如,如果第一行是 8、12、9 - 我希望函数将每一行的这些值相乘,然后将值作为语句打印出来。

 60 def calculator(Col1, Col2, Col3):
---> 61     volume = Col1 * Col2 * Col3
 62     return volume
 63 import csv

TypeError: can't multiply sequence by non-int of type 'str' 





def calculator(f1, f2, f3):
    volume = (f1) * (f2) * (f3) 
    return volume   
f1 = "Length"
f2 = "Height"
f3 = "Width"    
import numpy as np
data = np.loadtxt("C:\file.csv", delimiter    = ',', dtype = str)
with open("C:\Users\Desktop\file.csv") as f:
    mydictionary={f1:[], f2:[], f3:[]}
    for row in f:
        mydictionary[f1].append(row[0]) 
        mydictionary[f2].append(row[1])
        mydictionary[f3].append(row[2])
        print row
        f1, f2, f3 = map(float, row)
    print 'The calculated value is' + ' ' + calculator(f1, f2, f3) 

嗨, 请考虑数据类型(即使是 python)。 请尝试类似:

def calculator(col1,col2,col3):
    volume = (float(col1) * float(col2) * float(col3) )
    return volume

如果它不起作用,请post错误信息。 问候, d.

@StevenRumbalski 最初确定了您的代码存在问题并提供了解决方案,但它已经丢失了....

f1f2f3 是您之前在代码中定义的字符串。您将这些字符串传递给您的函数,它会尝试将字符串相互相乘,从而抛出 TypeError.

您创建了一个包含三个项目的字典,每列一个。字典值包含该列每一行的值。你永远不会对你的字典做任何事情。我认为字典结构不会帮助您实现找到每行列的乘积的目标。

这是一个替代方法,可以处理不确定数量的列。

import csv, operator
with open('test.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        # row is a list of strings,
        # one item for each column:  row --> [c1, c2, c3, ...]
        print ' * '.join(row),
        # create a list of floats
        row = map(float, row)
        # multiply all items
        result = reduce(operator.mul, row)
        print '= ', result