我刚开始使用python,请需要您的帮助。
我有一个包含13列的文本文件,在13列中,我有71.78 , 84.44 , 58.68
等数字。
我选择该列并将其转换为列表:
['71.78', '84.44', '58.68', '70.15', '58.39']
之后,我尝试转换为float以求和,但没有成功。
这是我的代码:
import csv
with open('cust.txt', 'r') as file:
file.readline()
prices = [cols[13] for cols in csv.reader(file, delimiter="\t")]
prices_list = (str(prices))
floats = [float(x) for x in prices_list.split(" ")]
print(sum(str(floats)))
谢谢你,我会很高兴。
更新:我的错误是: ValueError:无法将字符串转换为float:“ ['98 .14',”
答案 0 :(得分:0)
这应该有效。
prices = ['71.78', '84.44', '58.68', '70.15', '58.39']
floats = [float(x) for x in list]
print(sum(floats))
编辑:这是读取csv的另一种方法。
with open('cust.txt', 'r') as csvfile:
prices = [cols[1] for cols in csv.reader(csvfile, delimiter="\t")]
floats = [float(x) for x in prices]
print(sum(floats))
要直接获取浮动价格列表,请在构建价格列表时直接投射。
with open('cust.txt', 'r', newline='') as csvfile:
prices = [float(cols[1]) for cols in csv.reader(csvfile, delimiter=",")]
print(sum(prices))
答案 1 :(得分:0)
您只需要以下代码即可实现所需的功能:
floats = [float(x) for x in prices_list]
print(sum(floats))
答案 2 :(得分:0)
您的代码有两个问题:
cols[12]
而不是cols[13]
。prices_list = (str(prices))
将整个列表转换为一个字符串(实际上是仅包含该字符串的元组)。在下一条语句中,您将使用空格作为分隔符来拆分此字符串,但这不会删除其他字符,例如方括号,引号和逗号。这就是为什么向float转换失败的原因。它有助于打印中间结果(或使用调试器),以查看程序在做什么并确定问题出在哪里。
以下代码是一个有效的示例,假设您的CSV数据是制表符分隔的,有13列,最后一列包含您感兴趣的浮点数据。 由于没有您的CSV文件,因此我将StringIO对象与测试数据一起使用。 StringIO的行为就像文件一样,因此代码应与CSV文件相同。
#!/usr/bin/env python3
import csv
import io # just for the test data since I don't have the CSV file
TEST_DATA = """
a\tb\tc\td\te\tf\tg\th\ti\tj\tk\tl\t71.78
a\tb\tc\td\te\tf\tg\th\ti\tj\tk\tl\t84.44
a\tb\tc\td\te\tf\tg\th\ti\tj\tk\tl\t58.68
"""
print(TEST_DATA)
#with open('cust.txt', 'r') as file:
with io.StringIO(TEST_DATA) as file:
file.readline()
prices_as_str = [cols[12] for cols in csv.reader(file, delimiter="\t")]
print('prices_as_str: ' + repr(prices_as_str))
prices_as_float = [float(x) for x in prices_as_str]
# Alternatively you could use map():
# prices_as_float = list(map(float, prices_as_str))
print('prices_as_float: ' + repr(prices_as_float))
print('sum: ' + repr(sum(prices_as_float)))
其输出如下(制表符减少为6个字符以减小行宽):
a b c d e f g h i j k l 71.78
a b c d e f g h i j k l 84.44
a b c d e f g h i j k l 58.68
prices_as_str: ['71.78', '84.44', '58.68']
prices_as_float: [71.78, 84.44, 58.68]
sum: 214.9