1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python对Excel表格数据进行读取和写入

python对Excel表格数据进行读取和写入

时间:2024-02-03 09:05:05

相关推荐

python对Excel表格数据进行读取和写入

1.功能分析

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

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

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

1.4定向筛选所需数据;

1.5多表数据统计排行;

1.6多表数据合并新excel文件。

2.系统开发环境准确:

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

pycharm。

3.安装依赖库

这些依赖包 都要装好

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)# 获取表格中的所有sheetnames = book.sheet_names()# 获取第一个sheetsheet = 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 = 1for file in files:print(num, file)num += 1while(1):index_str = input("请选择需要导入的文件序号(多个文件导入时用空格分开, 输入0则导入所有文件,输入多文件则自动合并):")index_list = index_str.split(' ')try:index_list.remove('')except:passchoice_file_list = []if index_list[0] == '0':choice_file_list = filesbreakelse:try:for item in index_list:choice_file_list.append(files[int(item)-1])except:print("输入序号有误")continueif choice_file_list:breakelse: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 = 1for key in keys:print(num, key)num += 1choice_col_list = []while (1):index_str = input("请选择需要筛选出的列序号(多列之间用空格分开,0代表所有列):")index_list = index_str.split(' ')try:index_list.remove('')except:passchoice_file_list = []if index_list[0] == '0':choice_col_list = keysbreakelse:try:for item in index_list:choice_col_list.append(keys[int(item) - 1])except:print("输入序号有误")continueif choice_col_list:breakelse: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 = 1print(num, "城市")num += 1for key in keys:print(num, key)num += 1col = int(input("请输入需要进行筛选的数据所在的列:"))-2if col == -1:col = '城市'else:col = keys[col]op_list = ['<', '<=', '=', '>=', '>']print("比较操作符如下:")num = 1for op in op_list:print(num, op)num += 1operation = int(input("请输入比较操作符前的序号:"))-1operation = 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 = 1for key in keys:print(num, key) #显示当前表格中的所有的列num += 1col = int(input("请输入需要进行排序的数据所在的列:")) - 1col = 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 = 1for file in files:print(num, file)num += 1while (1):index_str = input("请选择需要导入的文件序号(多个文件导入时用空格分开, 输入0则导入所有文件,输入多文件则自动合并):")index_list = index_str.split(' ')try:index_list.remove('')except:passchoice_file_list = []if index_list[0] == '0':choice_file_list = filesbreakelse:try:for item in index_list:choice_file_list.append(files[int(item) - 1])except:print("输入序号有误")continueif choice_file_list:breakelse: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.模块设计

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

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

#加载显示数据def show_data(dictory):try:keys = list(dictory[list(dictory.keys())[0]].keys())except:print("当前数据为空")returnhead = ['城市']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)

效果图如下:

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

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/4for i in range(len(cols)):plt.bar(index+offset, data[i], color=color[i], width=1 / 5) #通过bar函数可以用柱状图来表达一些变量的统计分布offset += 1/4plt.xticks(index, dictory.keys())#表示刻度plt.legend(cols)#给图像加上图例plt.show()

效果图

5.3提起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数据进行处理_Alcooott的博客-CSDN博客_python处理excel数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。