当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-12-20
1.CSV概念 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个

1.CSV概念

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

2.什么是CSV库?

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

2.1读写对象

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

列表形式:

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

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

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

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

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

    4.解决问题

  • 生成文件列表的迭代器:
  • reader = csv.reader(open(path,'rt',encoding='utf-8'))
  • 取出需要的列存入列表
  • column1 = [row1[0:4] for row1 in reader]
  • 循环读取
  • while i <= reader.line_num - 1:
  • 计算与写入
  • grade = "%.3f"%(temp/(j)) # 写入 column1[i][3]=grade writer1.writerow(column1[i])
  • 返回计算后的文件路径
  • 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
    上一篇:python爬虫为什么很多公司都需要?
    下一篇:没有了
    网友评论