python学习笔记——自动生成图表工具(更新一)
2020-01-14 08:47
661 查看
今天我只对这个项目中的main.py主控文件进行更改,给他增加了一个制造一个图表后是否继续制作的功能,就是仅仅使用了while Ture的方法
原代码
import csv import matplotlib.pyplot as plt import ai_menu.get_data as number_data from ai_menu.menu import bar_menu # 条形图 from ai_menu.menu import pie_menu # 饼图 from ai_menu.menu import plots_menu # 折线图 plt.rcParams["font.family"] = 'Arial Unicode MS' class ai_menu(): def __init__(self,flie_name): self.flie_name=flie_name def ride_headers(self): '''返回csv文件的表头''' try: with open('{}.csv'.format(self.flie_name),'r')as f: ride=csv.reader(f) for i in ride: break return i except FileNotFoundError: print('找不到指定文件') return '' def op_menu(self): hreaders=self.ride_headers() print(hreaders) print('''图表代码 1,折线图 2,条形图 3,饼图 4,直方图''') menu=input('请选择要使用的图表>>>') if menu=='2': '''使用折线图''' op_number=input('请输入想使用几行数据>>>') if op_number=='2': print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type=int(input('请选择数据选择类型>>>')) try: if list_type==1: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.lists_number(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type==2: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.op_list_number(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type==3: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.scope_of_data(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type==4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers=input('请选择x轴显示方式>>>>') if op_numbers=='1': data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data_time(data[0]) bar_menu.two_plt(line[0], line[1], data[1], data[2], self.flie_name) else: data=number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line=number_data.get_two_line_data_time.scope_of_data_time_tag(data[0],data[1]) bar_menu.two_plt(line[0],line[1],data[2],data[3],self.flie_name) else: print('超过最大索引值') except TypeError as e: print('格式错误,不能构建图表。') pass elif op_number=='3': print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) try: if list_type==1: data=number_data.get_three_line_data.get_three_number_data(self.flie_name) line=number_data.get_three_line_data.list_number(data[0],data[1]) bar_menu.three_bar(line[0],line[1],line[2],data[2],data[3],data[4],self.flie_name) elif list_type==2: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.op_list_number(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) elif list_type==3: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) elif list_type==4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data_time(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) else: data=number_data.get_three_line_data_time.get_time_name_data(self.flie_name) line=number_data.get_three_line_data_time.scope_of_data_time_tag(data[0],data[1],data[2]) bar_menu.three_bar(line[0],line[1],line[2],data[3],data[4],data[5],self.flie_name) else: print('超过最大索引值') except Exception as e: print('格式错误,不能构建图表') pass elif menu=='1': #使用折线图 op_number = int(input('请输入想使用几行数据>>>')) if op_number == 2: print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) try: if list_type == 1: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.lists_number(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type == 2: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.op_list_number(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type == 3: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) elif list_type == 4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data_time(data[0]) plots_menu.two_plt(line[0], line[1], data[1], data[2], self.flie_name) else: data = number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line = number_data.get_two_line_data_time.scope_of_data_time_tag(data[0], data[1]) plots_menu.two_plt(line[0], line[1], data[2], data[3], self.flie_name) else: print('超过最大索引值') except TypeError as e: print('格式错误,不能构建图表。') pass elif op_number==3: '''输入3行数据''' print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) if list_type == 1: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.list_number(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) elif list_type == 3: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.op_list_number(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) elif list_type == 2: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) elif list_type == 4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data_time(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) else: data = number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line = number_data.get_two_line_data_time.scope_of_data_time_tag(data[0], data[1]) plots_menu.three_plt(line[0], line[1], data[2], data[3], self.flie_name) elif menu=='3': '''使用饼图''' line=pie_menu.get_menu(self.flie_name) pie_menu.plt_menu(line[0],line[1],line[2]) else: pass def run(self): self.op_menu() def main(): flie=input('请输入打开文件名称:') data=ai_menu(flie) data.run() if __name__ == '__main__': main()
下面是更改后的代码
import csv import matplotlib.pyplot as plt import ai_menu.get_data as number_data from ai_menu.menu import bar_menu # 条形图 from ai_menu.menu import pie_menu # 饼图 from ai_menu.menu import plots_menu # 折线图 plt.rcParams["font.family"] = 'Arial Unicode MS' class ai_menu(): def __init__(self,flie_name): self.flie_name=flie_name def ride_headers(self): '''返回csv文件的表头''' try: with open('{}.csv'.format(self.flie_name),'r')as f: ride=csv.reader(f) for i in ride: break return i except FileNotFoundError: print('找不到指定文件') return '' def op_menu(self): hreaders=self.ride_headers() print(hreaders) while True: print('''图表代码 1,折线图 2,条形图 3,饼图 4,直方图''') menu=input('请选择要使用的图表>>>') if menu=='2': '''使用折线图''' op_number=input('请输入想使用几行数据>>>') if op_number=='2': print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type=int(input('请选择数据选择类型>>>')) try: if list_type==1: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.lists_number(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==2: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.op_list_number(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==3: data=number_data.get_two_line_data.get_two_number_data(self.flie_name) line=number_data.get_two_line_data.scope_of_data(data[0]) bar_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers=input('请选择x轴显示方式>>>>') if op_numbers=='1': data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data_time(data[0]) bar_menu.two_plt(line[0], line[1], data[1], data[2], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: data=number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line=number_data.get_two_line_data_time.scope_of_data_time_tag(data[0],data[1]) bar_menu.two_plt(line[0],line[1],data[2],data[3],self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: print('超过最大索引值') except TypeError as e: print('格式错误,不能构建图表。') pass elif op_number=='3': print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) try: if list_type==1: data=number_data.get_three_line_data.get_three_number_data(self.flie_name) line=number_data.get_three_line_data.list_number(data[0],data[1]) bar_menu.three_bar(line[0],line[1],line[2],data[2],data[3],data[4],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==2: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.op_list_number(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==3: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type==4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data_time(data[0], data[1]) bar_menu.three_bar(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: data=number_data.get_three_line_data_time.get_time_name_data(self.flie_name) line=number_data.get_three_line_data_time.scope_of_data_time_tag(data[0],data[1],data[2]) bar_menu.three_bar(line[0],line[1],line[2],data[3],data[4],data[5],self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: print('超过最大索引值') except Exception as e: print('格式错误,不能构建图表') pass elif menu=='1': #使用折线图 op_number = int(input('请输入想使用几行数据>>>')) if op_number == 2: print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) try: if list_type == 1: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.lists_number(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type == 2: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.op_list_number(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type == 3: data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data(data[0]) plots_menu.two_plt(line[0],line[1],data[1],data[2],self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif list_type == 4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_two_line_data.get_two_number_data(self.flie_name) line = number_data.get_two_line_data.scope_of_data_time(data[0]) plots_menu.two_plt(line[0], line[1], data[1], data[2], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: data = number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line = number_data.get_two_line_data_time.scope_of_data_time_tag(data[0], data[1]) plots_menu.two_plt(line[0], line[1], data[2], data[3], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: print('超过最大索引值') except TypeError as e: print('格式错误,不能构建图表。') pass elif op_number==3: '''输入3行数据''' print('''数据选择类型 1:设置列表数量进行排序 2:根据列表索引进行排序 3:根据数据范围进行排序(目前只支持:整数) 4:根据时间范围进行排序(需要传入完整的年月日)''') list_type = int(input('请选择数据选择类型>>>')) if list_type == 1: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.list_number(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass elif list_type == 3: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.op_list_number(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass elif list_type == 2: data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass elif list_type == 4: print('''x轴显示方式 1:日期作为x轴 2:其他内容作为x轴''') op_numbers = input('请选择x轴显示方式>>>>') if op_numbers == '1': data = number_data.get_three_line_data.get_three_number_data(self.flie_name) line = number_data.get_three_line_data.scope_of_data_time(data[0], data[1]) plots_menu.three_plt(line[0], line[1], line[2], data[2], data[3], data[4], self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass else: data = number_data.get_two_line_data_time.get_time_name_data(self.flie_name) line = number_data.get_two_line_data_time.scope_of_data_time_tag(data[0], data[1]) plots_menu.three_plt(line[0], line[1], data[2], data[3], self.flie_name) op=input('是否继续(N:结束 其他:继续):') if op=='N': break else: pass elif menu=='3': '''使用饼图''' line=pie_menu.get_menu(self.flie_name) pie_menu.plt_menu(line[0],line[1],line[2]) op = input('是否继续(N:结束 其他:继续):') if op == 'N': break else: pass else: pass def run(self): self.op_menu() def main(): flie=input('请输入打开文件名称:') data=ai_menu(flie) data.run() if __name__ == '__main__': main()
不过这次的更改还是发现了一些重大的问题就是,重复的代码过多,造成了代码的不好读所以之后的任务就是在于如何的精简代码和对来代码来进行规范性操作
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- python学习笔记——自动生成图表工具(更新二)
- yii学习笔记—gii 自动代码生成工具
- 修改应用图标及添加启动画面(更新官方命令行工具自动生成)
- python学习重温(1)---自动case生成工具
- [转]轻松学习Ionic (四) 修改应用图标及添加启动画面(更新官方命令行工具自动生成)
- 使用Python生成博客目录并自动更新README
- 代码自动生成工具版本更新,新增支持Arduino uno R3
- 代码自动生成工具版本更新,新增支持Arduino uno R3
- python学习重温(2)---自动case生成工具之elementtree
- python学习重温(1)---自动case生成工具
- 轻松学习Ionic (四) 修改应用图标及添加启动画面(更新官方命令行工具自动生成)
- 轻松学习Ionic (四) 修改应用图标及添加启动画面(更新官方命令行工具自动生成)
- SQL SERVER 2005 数据库对比工具,并自动生成更新SQL脚本
- python的UML类图自动生成工具--pyreverse安装和使用
- 代码自动生成工具版本更新,新增支持Arduino uno R3
- python工具代码之身份证校验持续更新:【内向即失败--王奕君】
- python使用open flash chart生成图表(基于pyofc2)
- SQL语句图表生成工具ChartSQL
- 简单使用Python自动生成文章
- mybatis代码自动生成工具