首页 > 编程 > Python > 正文

python实战之实现excel读取、统计、写入的示例讲解

2020-02-22 23:58:44
字体:
来源:转载
供稿:网友

背景

图像领域内的一个国内会议快要召开了,要发各种邀请邮件,之后要录入、统计邮件回复(参会还是不参会等)。如此重要的任务,老师就托付给我了。ps: 统计回复邮件的时候,能知道谁参会或谁不参会。

而我主要的任务,除了录入邮件回复,就是统计理事和普通会员的参会情况了(参会的、不参会的、没回复的)。录入邮件回复信息没办法只能人工操作,但如果统计也要人工的话,那工作量就太大了(比如在上百人的列表中搜索另外上百人在不在此列表中!!),于是就想到了用python来帮忙,花两天时间不断修改,写了6个版本。。。

摘要

version_1 基本实现了excel读取、统计、显示功能,但问题也有不少,像显示出来后还要自已复制、粘贴到excel表,而且set中还有nan这样的bug。

version_2 相比较version_1而言,此版本用set代替list,可以自动去重。

version_3 解决了set中出现nan的bug,而且还加入的excel写入的功能,但一次只能写入一张表,所以要运行两次才能写入两张表(sheet)。

version_4 的改进在于将version_3中写入两张表格的操作,集成在一个程序里,只需要运行一次便可写入两张表,但也总是会写入两张表,万一你只想写入一张表呢??

version_5 相对之前版本的最大改进在于将程序模块化,更具可读性了; 对修复set中出现nan的方法也进行了改进和简化; 而且可以自由控制写入多少张表了。

version_final 相比较version_5,修复了一个bug,之前需要先验知识,现在更通用一点(prep函数取代了set2list函数)。

version_1

基本实现了excel读取、统计、显示功能,但问题也有不少,像显示出来后还要自已复制、粘贴到excel表,而且set中还有nan这样的值。

#version_1import osimport numpy as npimport pandas as pdos.chdir('C://Users//dell//Desktop//0711任务')print(os.getcwd())data = pd.read_excel('for_python.xlsx','Sheet2')return_set = set(data['回执名单'])demand_set = set(data['理事名单'])answer_list = []unanswer_list = []for each in demand_set: if each in return_set: answer_list.append(each) else: unanswer_list.append(each)notattend_set = set(data['回执名单'][-15:])nt = []for each in notattend_set: if each in answer_list: nt.append(each)def disp(ll, cap, num = True): print(cap) if num: for i, each in enumerate(ll):  print(i+1,each) else: for each in enumerate(ll):  print(each)disp(answer_list,'/n理事回执名单')disp(unanswer_list,'/n理事未回执名单')disp(nt,'/n理事回执说不参加名单')

version_2

相比较上一个版本,此版本用set代替list,可以自动去重。

#version_2import osimport numpy as npimport pandas as pdos.chdir('C://Users//dell//Desktop//0711任务')print(os.getcwd())data = pd.read_excel('for_python.xlsx','Sheet2')return_set = set(data['回执名单'])demand_set = set(data['理事名单'])answer_set = set([]) #理事回执名单unanswer_set = set([]) #理事未回执名单for each in demand_set: if each in return_set: answer_set.add(each) else: unanswer_set.add(each)notattend_set = set(data['回执名单'][-17:])nt = set([]) #理事回执说不参加名单for each in notattend_set: if each in answer_set: nt.add(each)ans_att_set = answer_set - nt #理事回执参加名单def disp(ss, cap, num = False): print(cap) if num: for i, each in enumerate(ss):  print(i+1,each) else: for each in ss:  print(each)#disp(answer_set,'/n理事回执名单')disp(ans_att_set,'/n理事回执说参加名单')disp(nt,'/n理事回执说不参加名单')disp(unanswer_set,'/n理事未回执名单')print(len(ans_att_set),len(nt),len(unanswer_set))            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表