Python编程基础:实验7——文件和数据格式化

Python编程基础:实验7——文件和数据格式化

一、前言

在本期实验中我们将利用之前学习的相关Python文件操作来进行题目代码练习,巩固知识。

二、我的环境

  • 电脑系统:Windows 11
  • 语言版本:Python 3.10.4
  • 编译器:VSCode

三、实验目的与要求

  1. 熟练掌握文件的打开、关闭和读写
  2. 理解数据组织的维度、掌握一维数据和二维数据的处理方法
  3. 掌握采用CSV格式对一二维数据文件进行读写的方法

四、实验任务

1、程序填空

【填空12-1】编写程序,根据用户输入的星座名称,输出此星座的出生日期范围及对应的星座符号。程序不完整,请完善代码。

星座及出生日期范围已存于文件SunSign.csv中,文件内容如下图所示。首先读入CSV文件中数据到一个列表中,然后获得用户输入,则输出此星座信息,直至用户输入“exit”程序结束。

在这里插入图片描述

在这里插入图片描述

fo = open(".\填空题\SunSign.csv", "r", encoding="GB18030")
ls = []
for line in fo:
    line = line.replace("\n","")
    ls.append(line.split(","))
fo.close()

while True:
    InputStr = input()
    InputStr.strip()
    flag = False
    if InputStr == 'exit':
        break
    for line in ls:
        if InputStr == line[0]:
            print("{}座的生日位于{}-{}之间".format(chr(eval(line[3])), line[1], line[2]))
            flag = True
    if flag == False:
        print("输入星座名称有误!")

它运行的结果是:

白羊座
♈座的生日位于321-419之间
天蝎座
♏座的生日位于1024-1122之间
水瓶座
♒座的生日位于120-218之间
exit

【填空12-2】编写程序,统计并输出传感器采集数据中光照部分的最大值、最小值和平均值,所有值保留小数点后2位。程序不完整,请完善代码。

已知传感器采集数据文件为sensor-data.txt,如下图所示,其中每行是一个整体数据.分别包括"日期、时间、温度、湿度、光照和电压"等6个读数,光照数据处于第5列,在列表中表示光照数据时下标应为4。

在这里插入图片描述

f = open(".\填空题\sensor-data.txt", "r")
avg, cnt = 0, 0
maxv, minv = 0, 9999
for line in f:
    ls = line.split()
    cnt += 1
    val = eval(ls[4])
    avg += val
    if val > maxv:
        maxv = val
    if val < minv:
        minv = val
print("最大值、最小值、平均值分别是:{:.2f},{:.2f},{:.2f}".format(maxv, minv, avg/cnt))
f.close()    

它运行的结果是:

最大值、最小值、平均值分别是:47.08,45.08,46.08

2、程序编程

【编程12-1】文件smartphone.txt 存放着部分公司手机年销量数据,每行为每家公司连续4年的销量数据,数据项间以制表符作为分隔,文件内容如下图所示。

编写程序,显示各公司年销量是否快速增长的情况(本题设年销量增长率均超过30%为快速增长),程序运行结果如下图所示。现给出部分程序代码,请根据题目要求进行编程。

在这里插入图片描述

rate = 0.3
def isBigGrowth(L, rate):
    for i in range(0, len(L)-1):
        yearGrowth = (L[i+1]-L[i])/L[i]
        if(yearGrowth < rate):
            return False
    return True
print("手机公司  是否快速增长?")
data = []

with open(".\编程题\smartPhone.txt",encoding="utf-8") as f:
    data = f.readlines()

del data[0]
for company in data:
    company = company.split()
    for i in range(1, len(company)):
        company[i] = float(company[i])
    if isBigGrowth(company[1:], 30/100):
        print("%s\t\t%s" % (company[0], "快速"))
    else:
        print("%s\t\t%s" % (company[0], "否"))

它运行的结果是:

手机公司  是否快速增长?
Samsung         否
Apple           否
Huawei          否
OPPO            快速
Vivo            快速
ZTE             否
LG              否
Lenovo          否
Xiaomi          否

五、最后我想说

本期有关文件和数据格式化的实验就到这里结束了,如果还对文件相关操作不熟悉的朋友可以去看看我前面更新的有关文件操作知识的博客。

Python编程基础:文件基础

另外,在本期实验中,如果出现编码报错,可以修改一下编码进行解决,如果出现无法找到文件的错误,可以尝试一下相对路径,看看文件是否跟代码放在同一文件目录下,或者使用绝对路径尝试一下。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值