首页 > 学院 > 开发设计 > 正文

Python操作Excel

2019-11-14 17:48:13
字体:
来源:转载
供稿:网友

一、系统性学习

对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址:

python操作Excel读写--使用xlrd

官方文档

Python 使用 Xlrd/xlwt 操作 Excel

用Python读写Excel文件

二、实战

帮朋友处理一个excel,幸好数据量不大,几万条数据。需求如下:

指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中

程序如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2014-04-10 21:47:56# @Function: 指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中 # @Author  : BeginManimport osimport stringimport xlrdimport xlwtdef get_data():	"""获取excel数据源"""	file = r'C:/Users/Administrator/Desktop/pytool/xlrd/initial_log_data.xls'			# 改成自己的路径	filepath = raw_input(u'请将xls文件路径粘贴进去,如果程序里已经指定了文件则按Enter键继续:')	is_valid = False 			# 验证文件	try:		filepath = [file, filepath][filepath != '']		PRint filepath		# 判断给出的路径是不是xls格式		if os.path.isfile(filepath):			filename = os.path.basename(filepath)			if filename.split('.')[1] == 'xls':				is_valid = True		data = None		if is_valid:			data = xlrd.open_workbook(filepath)	except Exception, e:		print u'你操作错误:%s' %e		return None	return datadef handle_data():	"""处理数据"""	data = get_data()	if data:		col_format = ['B', 'C', 'D']		# 指定的列		inp = raw_input(u'请选择指定的三列,用逗号分隔,默认的是B,C,D(英文逗号,不区分大小写),如果选择默认则按Enter键继续:/n')		try:			inp = inp.split(',')			col_format = [col_format,inp][len([i for i in inp if i in string.letters]) == 3]			col_format = [i.upper() for i in col_format]					# 转换成大写			table = data.sheet_by_index(0)									# 选取第一个工作区			nrows = table.nrows												# 行数			ncols = table.ncols												# 列数			str_upcase = [i for i in string.uppercase]						# 所有大写字母			i_upcase = range(len(str_upcase))								# 对应的数字			ncols_dir = dict(zip(str_upcase,i_upcase))						# 格式成字典			col_index = [ncols_dir.get(i) for i in col_format]				# 获取指定列所对应的索引			# 选取的三列是否同时满足 >=1或者同时<=-1			print u'正在检索中……'			count = 0			result = []			for i in xrange(nrows):				cell_0 = table.cell(i,col_index[0]).value				cell_1 = table.cell(i,col_index[1]).value				cell_2 = table.cell(i,col_index[2]).value				if (cell_0>=1 and cell_1>=1 and cell_2>=1) or (cell_0<=-1 and cell_1<=-1 and cell_2<=-1):					result.append(table.row_values(i))		# 将符合要求的一行添加进去					count += 1			print u'该文件中共%s行,%s列,其中满足条件的共有%s条数据' %(nrows, ncols, count)			print u'正在写入数据……'			col_name = col_format[0]+col_format[1]+col_format[2]			if write_data(result, col_name):				print u'写入成功!'		except Exception, e:			print u'你操作错误:%s' %e			return None	else:		print u'操作失败'		return Nonedef write_data(data, name):	"""写入数据,data为符合条件的数据列表,name表示指定的哪三个列,以此命名"""	file = xlwt.Workbook()	table = file.add_sheet(name,cell_overwrite_ok=True)	l = 0   # 表示行	for line in data:		c = 0 	# 表示一行下的列数		for col in line:			table.write(l,c,line[c])			c += 1		l += 1			defatul_f = r'C:/Users/Administrator/Desktop/pytool/xlrd'		# 默认路径	f = raw_input(u'请选择保存文件的路径:按回车跳过:')	f_name = r'/%s.xls' % name	filepath = [defatul_f+f_name, f+f_name][f != '']	file.save(filepath)	return Truedef main():	handle_data()if __name__ == '__main__':	main()

运行结果如下:

源数据

处理后的数据


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表