如何将CSV文件中的字符串转换为整数

31moq8wy  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(163)

试图在CVS文件中添加一列。它们被列为字符串,但是数字,我需要找到总数,但首先转换为整数。

import csv
filename = open('sales.csv','r')
file = csv.DictReader(filename)
sales = []

for col in file:
    sales.append(col['sales'])
print(sales)

我已经写了这个,但坚持转换字符串和使用sum函数。

uqxowvwt

uqxowvwt1#

对于这种类型的工作,我建议使用pandas,但是

import csv
sales = []
with open('sales.csv') as f:
    reader  = csv.DictReader(f)
    for row in reader:
        val = float(row['sales'])  # convert to a number; use int() if you don't have decimals
        sales.append(val)
print(sum(sales))
yhxst69z

yhxst69z2#

我建议您考虑将所有数据类型转换作为一个步骤,然后处理数据:

import csv
import decimal  # You should generally use decimal instead of float for currency

sales_records = []
with open('sales.csv') as sales_file:
    sales_reader = csv.DictReader(sales_file)
    for row in sales_reader:
        typed_record = {
            'label': row['label'],  # for example
            'sales': int(row['sales']),
            'price': decimal.Decimal(row['price']),  # for example
        }
        sales_records.append(typed_record)

sales_total = sum([record['sales'] for record in sales_records])
price_total = sum([record['price'] for record in sales_records])

更新:添加以下逐行细分:
导入一些我们需要的包:

import csv
import decimal

创建一个空列表来保存我们的记录:

sales_records = []

使用“上下文管理器”打开文件,以确保当我们完成它时它是关闭的(这对我们的计算机和程序的其余部分很好)

with open('sales.csv') as sales_file:
    ... # everything indented inside this "with" is while the file is open

创建一个csv阅读器,它将文件中的行作为字典而不是一个长字符串:

sales_reader = csv.DictReader(sales_file)

遍历文件的行字典,一次一个:

for row in sales_reader:
    ... # everything here applies to a single row

为每一行创建一个新的字典(称为typed_record)

typed_record = {
   ... # keys and values for the dictionary here as 'key': value,
}

在我们的行中取一个名为“label”的列,并将其直接放入新字典:

'label': row['label'],

在我们的行中取一个名为“sales”的列,将其转换为int并将其放入新字典中:

'sales': int(row['sales']),

在我们的行中取一个名为“price”的列,将其转换为Decimal并将其放入新字典中:

'price': decimal.Decimal(row['price']),

将新字典添加到我们的所有记录列表中:

sales_records.append(typed_record)

最后两行,一次做两件事:
首先,将字典记录列表转换为只有一个值的列表(这在Python中称为“列表解析”,是一个非常强大的工具:

[record['sales'] for record in sales_records]]

然后,我们总结所有这些值:

sales_total=sum(...)

相关问题