将文件中的每一列分配为变量以在带有 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 最初确定了您的代码存在问题并提供了解决方案,但它已经丢失了....
f1
、f2
、f3
是您之前在代码中定义的字符串。您将这些字符串传递给您的函数,它会尝试将字符串相互相乘,从而抛出 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
我正在尝试将文件中的每一列(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 最初确定了您的代码存在问题并提供了解决方案,但它已经丢失了....
f1
、f2
、f3
是您之前在代码中定义的字符串。您将这些字符串传递给您的函数,它会尝试将字符串相互相乘,从而抛出 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