您的位置:首页 > 编程语言 > Python开发

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

不过这次的更改还是发现了一些重大的问题就是,重复的代码过多,造成了代码的不好读所以之后的任务就是在于如何的精简代码和对来代码来进行规范性操作

  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_30305565 发布了8 篇原创文章 · 获赞 0 · 访问量 112 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: