利用面向对象方法,处理数据文件【Python】

2023-09-13 14:34:53

题目背景:处理两份数据文件(文本数据和JSON数据),用面向对象的方法,效果图用柱状图呈现。

本题思路:
1.首先,创建一个【基础数据类】,名为Record,它将包含成员属性和成员方法。这个类将作为数据处理的基础结构。

2.接着,创建一个【处理数据父类】,名为FileReader,它将包含成员方法,这个成员方法将被子类继承和实现(即为抽象方法)。

3.然后,创建两个子类,分别是【文本数据类】和【JSON数据类】。这两个类将继承父类的成员方法(即为复写)。

4.最后,在主函数体内,定义图形效果和数据整合处理。
注:接下来的代码,将按照解题思路依次呈现。

数据文件如下所示

文本数据:
在这里插入图片描述

JSON数据文件:
在这里插入图片描述

代码如下:

1.基础数据类(Record)

#创建【基础数据类】,名为data_define.py文件
class Record:
	'''定义成员属性'''
	def __init__(self,date,order_id,money,province):
			self.date = date
			self.order_id = order_id 
			self.money = money
			self.province = province

	'''利用魔法方法str,将后续返回来的数据,处理为字符串'''
	def __str__(self):
			return f"{self.date},{self.order_id},{self.money},{self.province}"

2.数据父类及两个子类

#创建数据父类,名为file_define.py文件
import json
from data_define import Record

#定义父类,方便后续子类复写,生成Record对象,并存为list列表
class FileReader:
	def read_data(self) -> list[Record]:
			pass


#处理文本内容文件:
class TextFileReader(FileRearder):
    #定义成员变量
    def __init__(self,path):
        self.path = path        #文件路径

    #复写,父类的成员方法
    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")
        record_list = []
        
        for i in f.readlines():
            i = i.strip()
            data_list = i.split(",")
            record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3])
            record_list.append(record)

        f.close()
        return record_list


#处理JSON文件内容
class JsonFileReader(FileRearder):
    def __init__(self,path):
        self.path = path

    def read_data(self) -> list[Record]:
        f = open(self.path,"r",encoding="UTF-8")
        data_list = []
        for i in f.readlines():
            data_dict = json.loads(i)
            record = Record(data_dict["date"],data_dict["order_id"],int(data_dict["money"]),data_dict["province"])
            data_list.append(record)

        f.close()
        return data_list


#测试(选写)
if __name__ == '__main__':
    text_file_reader = TextFileReader("D:/不太重要的文档/Python/资料/资料/2011年1月销售数据.txt")
    t1 = text_file_reader.read_data()

    json_file_reader = JsonFileReader("D:/不太重要的文档/Python/资料/资料/2011年2月销售数据JSON.txt")
    t2 = json_file_reader.read_data()

for i in t1:
	print(i)

for i in t2:
	print(i)

3.主体

#将主函数,命名为main.py文件
from file_define import *
from data_define import *
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType

text_file_reader = TextFileReader("D:/不太重要的文档/Python/资料/资料/2011年1月销售数据.txt")
jan_data: list[Record] = text_file_reader.read_data()


json_file_reader = JsonFileReader("D:/不太重要的文档/Python/资料/资料/2011年2月销售数据JSON.txt")
feb_data: list[Record] = json_file_reader.read_data()

#将两个月份的数据,进行合并
all_list = jan_data + feb_data

#生成字典:{"2023-01-01":1234}.累加计算一天内的营业额
data_dict = {}

for i in all_list:
    if i.date in data_dict.keys():
        data_dict[i.date] += i.money
    else:
        data_dict[i.date] = i.money


#生成可视化图表
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))

bar.add_xaxis(list(data_dict.keys()))       #将时间 "2023-01-01" 作为X轴

bar.add_yaxis("销售表",list(data_dict.values()),label_opts=LabelOpts(is_show=False))   #数值作为Y轴数据

bar.set_global_opts(
    title_opts = TitleOpts(title="销售表")
)

bar.render()

最后效果:
在这里插入图片描述在这里插入图片描述

更多推荐

车企大军「涌进」零部件赛道,毫米波雷达市场被重估

垂直整合,是新一轮竞争周期的关键词。从芯片、传感器,到域控制器;从三电总成到智能底盘,不管是特斯拉、比亚迪,还是蔚来、零跑、哪吒等后来者,自研+自产+自销,玩法不一。比如,特斯拉率先开启智能驾驶芯片的自研,彻底奠定了在自动驾驶领域的领先地位(不受制于第三方芯片供应商)。从算法(软件甚至功能)出发设计芯片架构,成为车企自

企业直播如何实现多画面多场景切换?

企业直播如何实现多画面多场景切换?应用场景主要应用于:企业的会议直播、小型会务直播、异地讲师培训授课,实现较低成本的导播台场景切换效果(阿酷TONY注,比不上硬件导播台,但整体还可以,能达到场景画面切换效果)。轻导播客户端(版本:1.2.0)官方介绍是:轻量级导播软件,10分钟速成导播能手直播画面自由布局、多人连麦自由

路由和node环境搭建

路由和node环境搭建1.1什么是路由1.2案例实操1.2.3效果展示二、配置Node.js2.1新建两个文件夹2.2配置环境变量1.1什么是路由在计算机网络中,路由(Routing)是指根据某种算法将数据包从源节点传输到目标节点的过程。在Web开发中,路由则指的是根据URL地址的不同,将用户请求导向对应的处理程序或页

解锁前端Vue3宝藏级资料 第五章 Vue 组件应用 3( Slots )

5.4Slots我们已经了解到组件能够接收任意类型的JavaScript值作为props,但组件要如何接收模板内容呢?在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。Slots可用于将Html内容从父组件传递到子组件进行显示。例如,你创建一个名为Button的组件,并且只想更改按

2个比较经典的PHP加密解密函数分享

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,

JavaScript 基础 - 第1天笔记

JavaScript基础-第1天了解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变量存储数据的“容器”掌握常见运算符的使用,了解优先级关系知道JavaScript数据类型隐式转换的特征介绍掌握JavaScript

头歌平台相关verilog练习

以下题目不具有难易程度的连续性文章目录1、三人表决电路2、多路选择器3、电路功能描述—门级原始结构4、电路功能描述—行为定义—连续赋值5、电路功能描述—行为定义—过程语句1、三人表决电路本关需要你根据所学的组合逻辑及数字电路的知识完成三人表决电路的设计,实现少数服从多数的表决规则,根据逻辑真值表和逻辑表达式完成表决功能

netty之数据读写源码阅读

数据读写write从client端的写开始看client与服务端建立完connect后可以从future里拿到连接的channel对象。这里的channel是io.netty.channel.Channel对象。调用其channel.writeAndFlush(msg);方法可以进行数据发送。writeAndFlush

Android 应用上线注意事项

将Android应用上线到GooglePlay商店需要仔细注意一系列问题,以确保应用的质量、安全性和用户体验。以下是一些在Android应用上线过程中需要注意的关键问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发者账号:确保你拥有有效的GooglePlay开发者账号,可

【ASP.NET Core】应用脱机文件 (app_offline.htm)

文章目录概述锁定的部署文件来源jenkins进行CI失败是可能app_offline.htm不会被自动删除导致ASP.NETCore应用异常,发布成功后则需手动删除该文件概述在很多情况下,需要在对相关组件(如数据库或Web服务)进行更改时使Web应用程序脱机。通常,在IIS和ASP.NET中,可以通过将名为App_of

【深度学习实验】前馈神经网络(四):自定义逻辑回归模型:前向传播、反向传播算法

目录一、实验介绍二、实验环境1.配置虚拟环境2.库版本介绍三、实验内容0.导入必要的工具包1.逻辑回归Logistic类a.构造函数__init__b.__call__(self,x)方法c.前向传播forwardd.反向传播backward2.模型训练3.代码整合一、实验介绍实现逻辑回归模型(Logistic类)实现

热文推荐