使用py对Excel表格进行基本读写操作
在处理Richard给的Task时觉得使用python直接对Excel表格进行读写操作会比较方便,所以学了如何用py对Excel表格进行基本的读写操作。虽然简单但是也需要学习成本,所以写下来以供以后查阅。
所需库
虽然pandas的dataframe也能和Excel进行交互,但是操纵起来没有那么的灵活。Python中有两个包,专门用来对Excel表格进行细致的操作:
- 负责读:xlrd [https://xlrd.readthedocs.io/en/latest/api.html]
- 负责写:xlwt [https://xlwt.readthedocs.io/en/latest/api.html]
spyder中好像太有这两个包的提示信息(按Tab键啥也没有),很多CSDN笔记也记录的粗略,还是官网给出的比较详细
数据结构
xlrd和xlwt中,把每个Excel文件都看作是一个WorkBook,而WorkBook中包含若干sheet,这些sheet对应于Excel中的sheet。而每个sheet又是由cell组成的,cell就是Excel表格中的一个单元格,它是xlrd中的数据结构,它包含若干property,包括值等。
xlrd库基本操作
以下栗子均来源于D:\CodeLab\PythonProject\AI\PythonDict\abstract_questions.py
读取一个Excel文件
rbook = xlrd.open_workbook("questions_classification.xlsx")
读取一个WorkBook中的一个sheet
读取sheet可以按下标读(从0开始)也可以按名字读
classification = rbook.sheet_by_name("questions classification")
classification = rbook.sheet_by_index(0)
读取某sheet中的cell
cell是xlrd中的数据结构,要分清楚是读值还是读cell对象
读取cell的方式有很多,可以多行,多列,也可以单个单元格,由不同函数实现特定功能
- classification.col_values(n) 所要读取的列序号
# 直接读数值是float类型,读出的值会被存放在list之中,使用map函数对list中每个元素进行转int操作
# 读数值
questionId = list(map(int, classification.col_values(0)[1 : ]))
# 读cell对象
classification.col(0, start_rowx=0, end_rowx=None)
xlwt库基本操作
打开一个Excel文件
打开一个Excel文件分为打开一个新的文件和打开一个已经存在的文件。打开一个已经存在的文件没有直接的实现函数,而是借由xlutils
包下的copy函数实现
- xlrd.open_workbook(fileName) 打开fileName的文件
- wbook.copy(rbook) 把rbook内容复制到wbook
# 打开一个新的Workbook(其实就是创建新对象)
wbook = xlwt.Workbook(encoding='ascii')
# 打开一个新的Workbook并把已存在文件的内容读入新的Workbook中
from xlutils import copy
rbook = xlrd.open_workbook("questions_classification.xlsx")
wbook = xlwt.Workbook(encoding='ascii')
wbook.copy(rbook)
向打开的文件写入数据
在写入数据之前要创新的sheet,之后就可以向sheet中写入数据了
- wbook.add_sheet(sheetName) 追加新sheet,参数可以是sheet的名字
- wbook.write(x, y, label = content) 向sheet中的(x, y)处写入content
# 创建新的sheet
wsheet = wbook.add_sheet("questions")
# 向指定位置写入数据
wsheet.write(0, 0, label="Question ID")
保存文件
我在保存为.xlsx
文件时发生了错误,并不明白为啥,就存成了.xls
文件。但是这对数据处理所需的Excel表格就够了
# 保存为questions_classification_v3.xls
wbook.save("questions_classification_v3.xls")