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

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

本题思路:

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

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

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

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

数据文件如下所示

文本数据:

JSON数据文件:

代码如下:

1.基础数据类(Record)

python 复制代码
#创建【基础数据类】,名为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.数据父类及两个子类

python 复制代码
#创建数据父类,名为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.主体

python 复制代码
#将主函数,命名为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()

最后效果:

相关推荐
西猫雷婶16 分钟前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
kiiila17 分钟前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt
小_太_阳43 分钟前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾1 小时前
scala借阅图书保存记录(三)
开发语言·后端·scala
老刘莱国瑞1 小时前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云
唐 城1 小时前
curl 放弃对 Hyper Rust HTTP 后端的支持
开发语言·http·rust
一只敲代码的猪2 小时前
Llama 3 模型系列解析(一)
大数据·python·llama
Hello_WOAIAI2 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
winfredzhang2 小时前
使用Python开发PPT图片提取与九宫格合并工具
python·powerpoint·提取·九宫格·照片
矩阵推荐官hy147623 小时前
短视频矩阵系统种类繁多,应该如何对比选择?
人工智能·python·矩阵·流量运营