python学习笔记——自动生成图表工具(更新一)

今天我只对这个项目中的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()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值