CSV__02--使用csv库对每条商品求平均评分

简介: 有很多数据存储在csv文件中,每件商品有唯一id,以及评分字段,csv文件按照id排列,需要将相同商品id的评分进行一个求平均分的操作。

1.CSV概念

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。

2.什么是CSV库?

一句话: 读写csv文件的库。

2.1读写对象

csv 库中有两组常用的读写对象:

列表形式:

  1. csv.reader :以列表的形式返回读取的数据;
  2. csv.writer :以列表的形式写入数据;

字典形式:

  1. csv.DictReader :以字典的形式返回读取的数据;
  2. csv.DictWriter:以字典的形式写入数据;

2.2读写方式

读写方式r、rb、rt r+、w、a、w+、a+:

  1. r:打开只读,没有文件报错;
  2. rb:只读。二进制文件按二进制位进行读取。不创建,不存在会报错。
  3. rt:只读。文本文件用二进制读取。不创建,不存在会报错。
  4. r+:可读写。覆盖写。不创建,不存在会报错。
  5. w:打开写,没有文件创建文件,文件有内容删除内容重头写;
  6. a:打开写,没有文件创建文件,文件有内容从尾行开始追写(继续写);
  7. w+:打开读写,没有文件创建文件,文件有内容删除内容重头写;
  8. a+:打开读写,没有文件创建文件,文件有内容从尾行开始追写(继续写)。

3.问题描述

有很多数据存储在csv文件中,每件商品有唯一id,以及评分字段,csv文件按照id排列,需要将相同商品id的评分进行一个求平均分的操作。

4.解决问题

  1. 生成文件列表的迭代器:
reader = csv.reader(open(path,'rt',encoding='utf-8'))
  1. 取出需要的列存入列表
 column1 = [row1[0:4] for row1 in reader]
  1. 循环读取
while i <= reader.line_num - 1:
  1. 计算与写入
grade = "%.3f"%(temp/(j))
# 写入
column1[i][3]=grade
writer1.writerow(column1[i])
  1. 返回计算后的文件路径
return "single_"+path

完整代码

# Author : Hu
# Date : 2022/11/24 19:40
# File : compute_grade.py

import csv

# 对单个作品求平均分
def single_work(path):
    reader = csv.reader(open(path,'rt',encoding='utf-8'))
    column1 = [row1[0:4] for row1 in reader]
    print("共有"+str(reader.line_num-1)+"条评价。")
    i = 1

    with open("single_"+path, 'w', encoding='UTF8', newline='') as f1:
        writer1 = csv.writer(f1)
        writer1.writerow(["realname", "userID", "workID", "grade"])
        while i <= reader.line_num - 1:
            j = 1
            grade = 0
            temp = float(column1[i][3])
            while column1[i][2] == column1[i+1][2]:
                temp = float(column1[i+1][3]) + temp
                i = i + 1
                j = j + 1
                # 判断是否到最后一条数据
                if i == reader.line_num-1:
                    break
            grade = "%.3f"%(temp/(j))
            # 写入
            column1[i][3]=grade
            writer1.writerow(column1[i])
            i = i + 1

    return "single_"+path
相关文章
|
3月前
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
109 0
|
关系型数据库 MySQL 数据库
tushare宏观数据使用pandas入库,增加唯一索引
1,对pandas入数据库 pandas代码中自带了to_sql的方法可以直接使用。 但是数据字段是text的,需要修改成 varchar的,否则不能增加索引。 在增加了主键之后可以控制数据不能再增量修改了。 增加:dtype类型可以解决 dtype={col_name: NVARCHAR(length=255) for col_name in dat
3541 0
|
15天前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
16 3
|
3月前
|
数据挖掘 数据处理 索引
使用Pandas从Excel文件中提取满足条件的数据并生成新的文件
使用Pandas从Excel文件中提取满足条件的数据并生成新的文件
54 1
|
3月前
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。
54 0
|
3月前
|
人工智能 程序员 数据处理
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
77 0
Pandas数据处理4、DataFrame记录重复值出现的次数(是总数不是每个值的数量)
|
3月前
|
机器学习/深度学习 Python
基于Python读取多个Excel文件数据并跨越不同xlsx表格文件计算平均值
基于Python读取多个Excel文件数据并跨越不同xlsx表格文件计算平均值
|
3月前
|
存储 定位技术 数据处理
Python基于指定范围筛选并剔除Excel表格中的数据
Python基于指定范围筛选并剔除Excel表格中的数据
|
3月前
|
存储 数据可视化 定位技术
Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图
Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图
|
3月前
|
NoSQL easyexcel Java
easyexcel导入导出百万条数据思路分析
easyexcel导入导出百万条数据思路分析
161 0