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

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

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

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

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

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

数据文件如下所示

文本数据:
利用面向对象方法,处理数据文件【Python】_第1张图片

JSON数据文件:
利用面向对象方法,处理数据文件【Python】_第2张图片

代码如下:

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()

最后效果:
利用面向对象方法,处理数据文件【Python】_第3张图片利用面向对象方法,处理数据文件【Python】_第4张图片

你可能感兴趣的:(python,开发语言)