文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python怎么实现Excel数据读取和写入

2023-06-30 06:46

关注

这篇“Python怎么实现Excel数据读取和写入”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现Excel数据读取和写入”文章吧。

1. 功能分析

加载文件夹内所有的Excel数据;

生产贡献度分析图表(以柱状图显示表格数据);

提起Excel表格中指定列数据;

定向筛选所需数据;

多表数据统计排行;

多表数据合并新excel文件。

2.系统开发环境

Anaconda3,在conda 中,window和ubuntu中的python功能一样 。

pycharm。

3.安装依赖库

Python怎么实现Excel数据读取和写入

这些依赖包   都要装好

import osimport xlrd2 #xlrd: 对Excel进行读相关操作import xlwt #xlwt: 对Excel进行写相关操作,且只能创建一个全新的Excel然后进行写入和保存。import numpyimport matplotlibfrom prettytable import PrettyTable  #PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格from matplotlib import pyplot as plt

4. 主函数设计

Excel数据分析师的主函数main(),主要用于实现系统的主界面。在主函数main()中,首先调用get_files_name()函数获取文件名。

get_files_name()函数代码如下:

#导入文件def get_files_name():    """    用于获取文件名    :return: 返回值为文件名组成的列表    """    file_list = os.listdir('./data')    return file_list

然后调用load_data()函数来读取excel文件并字典方式保存。

#保存生产excel表def load_data(file_list):    """    用于读取指定的文件并保存至字典数据结构中    :param file_list: 需要加载的文件列表    :return: 保存了文件内容的字典    """    dictory = {}    for file in file_list:        # 获取表格文件        book = xlrd2.open_workbook('./data/'+file)        # 获取表格中的所有sheet        names = book.sheet_names()        # 获取第一个sheet        sheet = book.sheet_by_index(0)        # 获取当前表格的行数        rows = sheet.nrows        # 获取当前表格的列数        cols = sheet.ncols        # 获取表头文件,即表格第一行        head = sheet.row_values(0)        for row in range(rows-1):            # 如果当前字典中没有该城市则创建一个            if not sheet.cell_value(row+1, 0) in dictory.keys():                dictory[sheet.cell_value(row+1, 0)] = {}            for col in range(cols-1):                dictory[sheet.cell_value(row+1, 0)][head[col+1]] = float(sheet.cell_value(row+1, col+1))    return dictory

接着调用menu()函数生成功能选择菜单。

menu()函数代码如下: 

# 打印菜单def menu():    print("  ----------Excel 数据分析师----------")    print("{:<30}".format("  ==============功能菜单============== "))    print("{:<30}".format("   1. 显示当前数据                     "))    print("{:<30}".format("   2. 以柱状图展示当前数据              "))    print("{:<30}".format("   3. 提起指定列                       "))    print("{:<30}".format("   4. 定向筛选指定元素                       "))    print("{:<30}".format("   5. 数据排行                         "))    print("{:<30}".format("   6. 重新加载数据                      "))    print("{:<30}".format("   7. 保存当前数据                      "))    print("{:<30}".format("   0. 退出程序                          "))    print("{:<30}".format(" ==================================== "))    print("{:<30}".format(" 说明:输入相应数字后按下回车选择指定功能 "))    print('\n')

并且应用if语句控制各个子函数的调用,从而实现对Excel文件的选择,Excel数据的加载,选择、筛选、合并、排序和统计等功能。

主函数完整代码如下:

if __name__ == "__main__":    # 导入文件    files = get_files_name()    data = {}    print("当前data文件夹下的文件如下:")    num = 1    for file in files:        print(num, file)        num += 1    while(1):        index_str = input("请选择需要导入的文件序号(多个文件导入时用空格分开, 输入0则导入所有文件,输入多文件则自动合并):")        index_list = index_str.split(' ')        try:            index_list.remove('')        except:            pass        choice_file_list = []        if index_list[0] == '0':            choice_file_list = files            break        else:            try:                for item in index_list:                    choice_file_list.append(files[int(item)-1])            except:                print("输入序号有误")                continue        if choice_file_list:            break        else:            print("输入序号有误")    data = load_data(choice_file_list)    print("导入数据成功\n")    # 调用函数,打印菜单    menu()    while 1:        choice = input("请选择指定功能:")        if choice == '0':            print("\n退出程序\n")            exit()        elif choice == '1':            print("当前功能:显示当前数据")            show_data(data)            input('\n按下回车返回菜单')            menu()        elif choice == '2':            print("当前功能:以柱状图显示数据")            draw_plot(data)            input('\n按下回车返回菜单')            menu()        elif choice == '3':            print("当前功能:筛选指定列")            keys = list(data[list(data.keys())[0]].keys())            print("当前表格中的列如下:")            num = 1            for key in keys:                print(num, key)                num += 1            choice_col_list = []            while (1):                index_str = input("请选择需要筛选出的列序号(多列之间用空格分开,0代表所有列):")                index_list = index_str.split(' ')                try:                    index_list.remove('')                except:                    pass                choice_file_list = []                if index_list[0] == '0':                    choice_col_list = keys                    break                else:                    try:                        for item in index_list:                            choice_col_list.append(keys[int(item) - 1])                    except:                        print("输入序号有误")                        continue                if choice_col_list:                    break                else:                    print("输入序号有误")            data = get_specified_cols(data, choice_col_list)            print("筛选成功")            input('\n按下回车返回菜单')            menu()        elif choice == '4':            print("当前功能:筛选指定行")            keys = list(data[list(data.keys())[0]].keys())            print("当前表格中的列如下:")            num = 1            print(num, "城市")            num += 1            for key in keys:                print(num, key)                num += 1            col = int(input("请输入需要进行筛选的数据所在的列:"))-2            if col == -1:                col = '城市'            else:                col = keys[col]            op_list = ['<', '<=', '=', '>=', '>']            print("比较操作符如下:")            num = 1            for op in op_list:                print(num, op)                num += 1            operation = int(input("请输入比较操作符前的序号:"))-1            operation = op_list[operation]            value = input("请输入需要筛选的值:")            data = get_specified_data(data, operation, col, value)            print("筛选成功")            input('\n按下回车返回菜单')            menu()        elif choice == '5':            print("当前功能:数据排序")            keys = list(data[list(data.keys())[0]].keys())            print("当前表格中的列如下:")            num = 1            for key in keys:                print(num, key) #显示当前表格中的所有的列                num += 1            col = int(input("请输入需要进行排序的数据所在的列:")) - 1            col = keys[col]            reverse = input("排序方式:\n1 从大到小排序\n2 从小到大排序\n")            if reverse == '1':                data = sort_data(data, col, True)            elif reverse == '2':                data = sort_data(data, col, False)            else:                print("输入有误")            input('\n按下回车返回菜单')            menu()        elif choice == '6':            # 导入文件            files = get_files_name()            data = {}            print("当前文件夹下的文件如下:")            num = 1            for file in files:                print(num, file)                num += 1            while (1):                index_str = input("请选择需要导入的文件序号(多个文件导入时用空格分开, 输入0则导入所有文件,输入多文件则自动合并):")                index_list = index_str.split(' ')                try:                    index_list.remove('')                except:                    pass                choice_file_list = []                if index_list[0] == '0':                    choice_file_list = files                    break                else:                    try:                        for item in index_list:                            choice_file_list.append(files[int(item) - 1])                    except:                        print("输入序号有误")                        continue                if choice_file_list:                    break                else:                    print("输入序号有误")            data = load_data(choice_file_list)            print("导入数据成功\n")            # 打印菜单            menu()        elif choice == '7':            print("当前功能:保存数据")            save(data)            input('\n按下回车返回菜单')            menu()        else:            print("请输入正确的数字")            input('\n按下回车返回菜单')            menu()

5.模块设计

加载文件夹内所有的Excel数据

show_data()函数通过PrettyTable 库(PrettyTable 库是python中的一个第三方库,可用来生成美观的ASCII格式的表格)将之前保存的字典数据生成表格。

#加载显示数据def show_data(dictory):    try:        keys = list(dictory[list(dictory.keys())[0]].keys())    except:        print("当前数据为空")        return    head = ['城市']    head.extend(keys)    table = PrettyTable(head)    for key in dictory.keys():        line = [key]        for key_2 in keys:            line.append(dictory[key][key_2])        table.add_row(line)    print(table)

效果图如下:

Python怎么实现Excel数据读取和写入

生产贡献度分析图表(以柱状图显示表格数据)

draw_plot( )函数使用了matplotlib库。通过atplotlib.rc( )来设置字体,通过plt.bar( )函数来绘制柱状图,通过plt.legend( )函数来给图添加图例。

#制作图表def draw_plot(dictory):    font = {'family': 'MicroSoft Yahei', 'weight': 'bold', 'size': 7}    matplotlib.rc('font', **font) #设置中文字体    # 定义三个颜色    index = numpy.arange(len(dictory.keys()))    color = [(256 / 256, 0 / 256, 0 / 256, 1),            (0 / 256, 0 / 256, 256 / 256, 1),            (0 / 256, 256 / 256, 0 / 256, 1),            (0 / 256, 0 / 256, 0 / 256, 1)]    first_key = list(dictory.keys())    first_key = first_key[0]    cols = list(dictory[first_key].keys())    data = []    for i in range(len(cols)):        data.append([])    for key in dictory.keys():        for col in range(len(cols)):            data[col].append(dictory[key][cols[col]])    offset = -1/4    for i in range(len(cols)):        plt.bar(index+offset, data[i], color=color[i], width=1 / 5) #通过bar函数可以用柱状图来表达一些变量的统计分布        offset += 1/4    plt.xticks(index, dictory.keys())#表示刻度    plt.legend(cols)#给图像加上图例    plt.show()

效果图 

Python怎么实现Excel数据读取和写入

提起Excel表格中指定列数据

get_specified_cols()函数根据用户在菜单输入的列名,通过字典的索引筛选出列名,加载指定列的所有数据。

#提起指定列def get_specified_cols(dictory, col_name_list):    """    筛选出指定的列    :param dictory:原始字典    :param col_name_list: 需要筛选出的列名,城市名默认出现    :return: 筛选之后的字典    """    new_dict = {}    for key in dictory.keys():        new_dict[key] = {}        for col_name in col_name_list:            new_dict[key][col_name] = dictory[key][col_name]    return new_dict

效果图如下:

Python怎么实现Excel数据读取和写入

以上就是关于“Python怎么实现Excel数据读取和写入”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯