主文件main.py
from file_define import FileReader,TextFileReader,JsonFileReader
from data_define import Record
#导入柱状图的包
from pyecharts.charts import Bar
from pyecharts.options import *
#主题类型
from pyecharts.globals import ThemeType
#数据准备
text_file_reader=TextFileReader(“G:/2011年1月销售数据.txt”)
json_file_reader=JsonFileReader(“G:/2011年2月销售数据JSON.txt”)
#获取两个月的数据,list类型存放的Record对象
jan_data:list[Record]=text_file_reader.read_data()
feb_data:list[Record]=json_file_reader.read_data()
#将两个月份的数据合并为一个list来存储
all_data: list[Record]=jan_data+feb_data
#数据计算
使用字典 使用for循环进行把相同月份进行累加,不同月份则新建
#{“2011-01-01:1234”}
data_dict={}
for record in all_data:
#如果数据里面的keys在里面则表命当前记录已经有记录了
# 所以和老记录钱数进行累加
if record.date in data_dict.keys():
data_dict[record.date]+=record.money
else:
#否则新建一个新的记录
data_dict[record.date]=record.money
#可视表的开发
bar=Bar(
init_opts=InitOpts(theme=ThemeType.LIGHT)
)
bar.add_xaxis(list(data_dict.keys()))
bar.add_yaxis(“销售额”,list(data_dict.values()),label_opts=LabelOpts(is_show=False))
#标题
bar.set_global_opts(
title_opts=TitleOpts(title=“每日销售额”)
)
bar.render(“每日销售额.html”)
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 #省份
def str(self):
return f"{self.date},{self.order_id},{self.money},{self.province}"
file_define.py 抽象类读取数据
#和文件相关类的定义
先定义一个抽象类来做顶层设计,确定有哪些功能
import json
from data_define import Record
class FileReader:
#读取文件的数据,将读到的每一条数据都转会为Record对象,将他们都封装到list内返回即可
def read_data(self)-> list[Record]:
pass
class TextFileReader(FileReader):
def init(self,path):
self.path=path #定义成员的变量记录文件的路径
#复写(实现抽象类的方法)父类的方法
def read_data(self) -> list[Record]:
f=open(self.path,“r”,encoding=“UTF-8”)
#读取每一行
record_list:list[Record]=[]
for line in f.readlines():
line=line.strip() #消除读取到的每一行的\n
data_list=line.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(FileReader):
def init(self,path):
self.path=path
#复写实现
def read_data(self) -> list[Record]:
f=open(self.path,“r”,encoding=“UTF-8”)
record_list:list[Record]=[]
for line in f.readlines():
#得到字典对象
data_dict=json.loads(line)
record=Record(data_dict[“date”],data_dict[“order_id”],int(data_dict[“money”]),data_dict[“province”])
record_list.append(record)
f.close()
return record_list
#文本读取路径和json数据
if name == ‘main’:
text_file_reader=TextFileReader(“G:/2011年1月销售数据.txt”)
json_file_reader=JsonFileReader(“G:/2011年2月销售数据JSON.txt”)
# list1=text_file_reader.read_data()
# list2=json_file_reader.read_data()
# for l in list1:
# print(l)
# for l in list2:
# print(l)
结果: