首页 > 其他分享 >CSV__03--使用csv库对每家店铺的所有商品评价,去掉一个最高分和一个最低分求平均值

CSV__03--使用csv库对每家店铺的所有商品评价,去掉一个最高分和一个最低分求平均值

时间:2022-12-02 12:32:27浏览次数:48  
标签:__ 03 库对 csv temp 迭代 reader path CSV

1 CSV

python对CSV文件的读写处理常用CSV库完成。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

2 前景知识

2.1 迭代器

  1. 迭代器的概念

    迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口。

  2. 迭代器的特点

    1. 强制性:必须将元素从迭代器中取出后,才能使用元素;
    2. 一次性:取出以后该元素就从迭代器中删除,无法二次遍历;
    3. 未知性:容器内部元素无法直接定位,只能遍历按序取出。
  3. python使用迭代器处理CSV文件

    1. 将path路径下的文件创建为reader迭代器

      reader = csv.reader(open(path, 'rt', encoding='utf-8'))
      
    2. 遍历得到迭代器全行的前四列

      column1 = [row1[0:4] for row1 in reader]
      

2.2 去掉最大值和最小值

先按照店铺workID将grade添加至temp数组

temp.remove(min(temp))
temp.remove(max(temp))

3 问题描述

有很多数据存储在csv文件中,每个店铺有唯一userID,每件商品有唯一的workID,以及评分字段,csv文件按照userID排列,需要将相同userID店铺的不同商品评分进行一个去掉一个最高分和一个最低分求平均值操作。

注意点:

  1. 没家店铺的商品数不同;
  2. 平均分精度控制;
  3. 及时跳出循环,避免数组越界。

4 完整代码

# 对每家店铺的所有商品评价,去掉一个最高分和一个最低分求平均值
def total_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("total_"+path, 'w', encoding='UTF8', newline='') as f1:
        writer1 = csv.writer(f1)
        writer1.writerow(["realname", "userID", "grade", "num"]) # 写入标题
        while i <= reader.line_num - 1:
            # 作品数
            j = 1
            # 得分
            grade = 0
            # 所有作品得分的数组
            temp = [float(column1[i][3])]
            while column1[i][1] == column1[i + 1][1]:    # 判断userID店铺是否相同
                i = i + 1
                temp.append(float(column1[i][3]))
                j = j + 1
                # 数组中添加统一参赛者的作品得分
                if i == reader.line_num - 1:             # 判断是否为最后一个商品评价
                    break
            # 去掉最小值 去掉最大值 求平均
            temp.remove(min(temp))
            temp.remove(max(temp))
            grade = "%.3f"%(sum(temp)/(j-2))
            # grade = round(temp/(j),5)
            # 写入平均分
            column1[i][2] = grade
            # 写入作品数量
            # column1[i].append(j)
            column1[i][3] = j
            # 存入csv
            writer1.writerow(column1[i])
            i = i + 1

标签:__,03,库对,csv,temp,迭代,reader,path,CSV
From: https://blog.51cto.com/husheng/5906902

相关文章

  • [leetcode每日一题]12.2
    ​​1769.移动所有球到每个盒子所需的最小操作数​​有 ​​n​​ 个盒子。给你一个长度为 ​​n​​ 的二进制字符串 ​​boxes​​ ,其中 ​​boxes[i]​​ 的值......
  • golang二分查找算法
    一、条件:一组数据要进行二分查找,那么这个要查找的元素是有序,并且是连续存放(数组)。这样才可以进行二分查找。在数据库主键查找,二分查找算法是底层算法原理。二、下面用golang......
  • 祝各位MM们节日快乐!
    祝各位MM们节日快乐!尤其工作在第一线的MM程序员们节日快乐!祝你们:妩媚伶俐,天下无双,人见人爱,花见花开,车见车载,沉鱼落雁,闭月羞花,晕倒一片迷死一帮……美......
  • 用NetCore + ReactJS 实现一个前后端分离的网站 (4) 用户登录与授权
    用NetCore+ReactJS实现一个前后端分离的网站(4)用户登录与授权1.前言这几天学了一些前端的知识,用AntDesignPro的脚手架搭建了一个前端项目->这里。登录界面是现......
  • Python 图片主题检测并剪切
    importcv2importnumpyasnp#主题检测,剪切defimageCut(srcImage,desImage):try:#1、加载图片,转成灰度图#image=cv2.imread("D:/work/......
  • spring接口重放过滤问题
    1、定义注释importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.anno......
  • PostgreSQL的常用DDL操作语句
    1.建表、删除表的DDL语句CREATETABLEIFNOTEXISTS"my_table"(idSERIALNOTNULL,namevarchar(255)NOTNULL,agevarchar(255)NOTNULL,drint2DEF......
  • html实现文本框
    <divclass="content">    <divclass="page_name">注册</div>    <divclass="register_content">      <divclass="register_l"> ......
  • PYTHON - openpyxl (一)
    1.1安装pipinstallopenpyxl1.2工作簿函数说明wb=load_workbook(filename)打开工作簿wb=Workbook()创建空白工作簿wb.save(filename)保存工......
  • 第一章:开始使用ASP.NET Core (三)
    1.3 ASPNETCore如何工作?到目前为止,您应该对ASPNETCore是什么有一个基础的了解。在本节中,您将看到使用ASPNETCore构建的应用程序是如何工作的,从用户请求URL到如何在浏览......