Python 读写 Excel文件 总结
最近接连帮同学处理Excel表格,他们的出发点就是,数据项太多导致手动处理工作量太大了,寻求能不能用软件自动化处理的办法。其实利用Python编写十行左右代码就能解决相应的重复简单的工作,由于我总是记不清相关库,在这里详细总结各种库和函数接口以方便自己查阅和帮助大家高效完成工作。
Excel是什么
我们常用的Excel是由微软开发的电子表格办公软件,其所创建的文件显示为一系列行与列组成的网格。
Excel文件的后缀名通常有以下几种形式:
- xlsx Excel2007 - 目前最新版默认的文件格式,不能有宏
- xls Excel97 - 2003版的文件格式,可以有宏
- csv 以逗号分隔的文本文件(Comma-Separated Values)
在Excel中还能以纯文本形式(使用Tab分隔)或PDF格式保存,这种存储格式会导致表格数据失去通用性,在此不作说明。
xlrd模块读Excel
xlrd是一个读取Excel文件的Python模块(A Python module for extracting data from MS Excel (TM) spreadsheet files.)
首先要掌握的是open_workbook
方法,查看源码可见其参数非常复杂,通常只需要传入文件名参数即可,返回一个Book
对象。
filename = 'myfile.xls'
readxls = xlrd.open_workbook(filename)
Excel打开后可能会有多个电子表(sheet),成员方法sheets
返回打开的book内全部电子表组成的列表。
获取第一个电子表
sheet1 = readxls.sheets()[0]
# sheet_by_index 按下标返回电子表
# sheet1 = readxls.sheet_by_index(0)
# sheet_by_name 按表名返回电子表
# sheet1 = readxls.sheet_by_name('Sheet1')
对电子表遍历
# 获取电子表行数
nrows = sheet1.nrows
ncols = sheet1.ncols
# 按行遍历
for i in range(nrows):
# rowList为字符串组成的列表
rowList = sheet1.row_values(i)
# 按列遍历
for i in range(ncols):
colList = sheet1.col_values(i)
xlwt模块写Excel
一般处理Excel表格需要对Excel内的数据进行修改整理,前面的wlrd模块只完成的读的操作,若要实现对数据项的修改,这里采取引入xlwt模块,新建Excel完成写入的操作。
# 创建一个Workbook对象,用于保存工作表
workbook = xlwt.Workbook()
# 添加电子表
sheet1 = workbook.add_sheet('Sheet1')
# 以二维表格形式存入数据
# 乘法口诀表
rows = 9
cols = 9
for i in range(rows):
for j in range(cols):
if i<=j:
sheet1.write(j, i, '%d x %d = %d'%(i+1, j+1, (i+1)*(j+1)))
# 保存工作表
workbook.save('out.xls')
运行结果
csv模块读写csv文件
对于特殊的csv文件格式,直接引入Python自带的csv模块处理会更方便。
读文件
import csv
with open(filename) as f:
data = csv.reader(f)
# 按行读取文件
for row in data:
pass
写文件
首先创建一个writer对象
csv_writer = csv.writer(filename)
写文件实例
import csv
headers = ['id','name','age']
rows = [
[1, 'zong', 23],
[2, 'xxx', 22],
[3, 'izcat', -1],
[4, 'helloworld', 0]]
with open('out.csv','w', newline='') as f:
# 创建一个writer对象
csv_writer = csv.writer(f)
# writerow写入一行
csv_writer.writerow(headers)
# writerows写入多行
csv_writer.writerows(rows)
保存的文件以文本形式打开时,显示内容为逗号分隔的纯文本字符;用Excel软件打开则显示为正常的电子表格。
pandas库读Excel
对于需要做数值处理,特别是有关矩阵、向量等数值计算,不妨使用pandas库来读入Excel中的数据。
示例
import pandas as pd
filename = "data.xls"
# header=0 第一行为列名
# header=None 第一行没有列名,为数据
data = pd.read_excel(filename, header=None)
# 二维表格的列数和行数
m, n = data.shape
# 数据归一化处理
data = (data-data.min()) / (data.max()-data.min())
# 转化为矩阵 方便以矩阵形式的数值计算
data = data.as_matrix(columns=None)
(待完善)