题目背景:处理两份数据文件(文本数据和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()
最后效果: