"""
实现步骤
1.设计一个类,可以完成数据的封装
2.设计一个抽象类,来实现读取操作,用子类实现具体的功能
3.读取文件,生产数据对象
4.进行数据的逻辑计算
5.通过pyecharts绘图
"""
from pyecharts.options import *
from file_define import Read_file, TextRead, JsonRead
from record import Record
from pyecharts.charts import Bar
from pyecharts.charts import *
from pyecharts.globals import ThemeType
text_read = TextRead("E:/data1.txt") # 获取对象
json_read = JsonRead("E:/data2.txt")
list_1: list[Record] = text_read.read_data() # 获取数据并进行注解
list_2: list[Record] = json_read.read_data()
all_list = list_1+list_2
my_dict = {}
for record in all_list:
if record.data in my_dict.keys():
# 如果有记录就做累加
my_dict[record.data] += record.money
else:
# 如果没有就等于当前money
my_dict[record.data] = record.money
# 绘制图形
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
bar.add_xaxis(list(my_dict.keys()))
bar.add_yaxis("销售额", list(my_dict.values()),label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
title_opts=TitleOpts(title="每日销售额")
)
bar.render("每日销售额柱状图.html")
完成对数据的封装
"""
记录数据
"""
class Record:
def __init__(self, data, order_id, money, province):
self.data = data
self.order_id = order_id
self.money = money
self.province = province
def __str__(self):
return f"{self.data}, {self.order_id}, {self.money}, {self.province}"
# 用父类定义抽象方法,用子类来具体实现,比如csv文件读取和json文件读取
import json
from record import Record
class Read_file:
def read_data(self) -> list[Record]:
# 读取文件的数据,读到的每一条数据都转化为record对象,将她们都封装到list内再返回
pass
class TextRead(Read_file): # 读取文本文件
def __init__(self, path): # 使用构造方法,构建类对象会自动传参
self.path = path # 定义成员变量记录文件路径
def read_data(self) -> list[Record]: # 函数返回值类型注解
f = open(self.path, "r", encoding="UTF-8")
data_lines = f.readlines()
record_list = [] # 定义一个空列表
for line3 in data_lines:
line3 = line3.strip()
data_list = line3.split(",") # 根据逗号进行分割,返回一个list
# 创建一个record对象,并通过构建方法__int__直接传入参数
record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
record_list.append(record)
f.close()
return record_list
class JsonRead(Read_file): # 读取文本文件
def __init__(self, path):
self.path = path # 定义成员变量记录文件路径
def read_data(self) -> list[Record]:
f2 = open(self.path, "r", encoding="UTF-8")
my_list = []
data_lines = f2.readlines()
for line in data_lines:
data_dict = json.loads(line) # 读取出来是一个字典
record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
my_list.append(record)
f2.close()
return my_list
if __name__ == '__main__': # 展示数据
text_read = TextRead("E:/data1.txt") # 构建一个对象
json_read = JsonRead("E:/data2.txt")
list1 = json_read.read_data() # 使用方法返回一个列表
list2 = text_read.read_data()
for line in list1:
print(line)
for line2 in list2:
print(line2)