这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
前言:
之前在使用python爬虫的时候往往要把数据保存到Excel或csv文件里,所以涉及了文件读写操作,在此做一下整理。
1.Excel文件操作(xlrd、xlwt模块)
1.Excel文件简介
Excel中的三大对象:
- WorkBook:工作簿对象
- Sheet:表单对象
- Cell:表格对象
其中工作簿对象代表整个Excel文件,表单对象代表Excel文件中的每一页sheet,cell对象代表每一个数据格。
- 其中xlrd主要是读取Excel文件中表格数据,xlwt模块主要是往Excel文件中写数据的。
1.2 xlrd模块读文件
以下表为例
-
xlrd库的open_wordbook()方法用来打开一个Excel文件
workboot = xlrd.open_workbook("Excel文件测试用.xlsx") -
工作簿对象的sheet_names()方法用来获取工作簿的所有sheet页的名字
sheetNames = workboot.sheet_names()输出:
['学科', '学生'] -
可以通过sheet的索引号(即页号)获取sheet页面(注意索引号从0开始),或通过sheet的名字获取该sheet
sheet1 = workboot.sheet_by_index(1) sheet11 = workboot.sheet_by_name("学生") -
sheet对象的nrows方法获取总行数,ncols获取总列数
rows = sheet1.nrows clo = sheet1.ncols输出:
行数:5 列数:4 -
cell(rowx, colx):获取sheet对象中第rowx行,第colx列的单元对象,返回值的格式为“单元类型:单元值”
data = sheet1.cell(2, 1)输出:
text:'数科' -
cell_value(rowx, colx):获取sheet对象中第rowx行,第colx列的单元数据,返回值为当前值
data = sheet1.cell_value(2, 1)输出:
数科 -
row_slice(rowx, start_colx, end_colx):以切片方式获取sheet中第rowx行从start_colx列到end_colx列的单元,返回值为列表;
data = sheet1.row_slice(0, 1, 3)输出:
[text:'班级', text:'年龄'] -
col_values(colx, start_rowx, end_rowx): 获取sheet中第colx列从start_rowx行到end_rowx行的数据,返回值为列表。
row_data = sheet1.col_values(0, 1, 4)输出:
['小明', '小红', '李华'] -
col_slice(colx, start_rowx, end_rowx): 以切片方式获取sheet中第colx列从start_rowx行到end_rowx行的数据,返回值为列表。
row_data = sheet1.col_slice(0, 1, 4)输出:
[text:'小明', text:'小红', text:'李华']
1.3 xlwt模块(对后缀为.xls文件进行写操作)
-
创建一个工作簿
xl = xlwt.Workbook(encoding='utf-8') -
创建一个sheet对象,第二个参数是指单元格是否允许重设置,默认为False
sheet = xl.add_sheet('信息', cell_overwrite_ok=False) -
设定样式
# 初始化样式 style = xlwt.XFStyle() # 为样式创建字体 font = xlwt.Font() font.name = 'Times New Roman' # 黑体 font.bold = True # 下划线 font.underline = False # 斜体字 font.italic = True # 设定样式 style.font = font -
往sheet页中写入数据
# 第一个参数代表行,第二个参数是列,第三个参数是内容,第四个参数是格式 sheet.write(0, 0, '姓名') sheet.write(0, 1, '性别', style) -
可以通过循环将列表的数据写入sheet页中
names = ["张三", "李四", "王五", "小红", "李华"] sexs = ["男", "男", "男", "女", "男"] # 数据行号 for i in range(len(names)): sheet.write(line, 0, names[i]) sheet.write(line, 1, sexs[i]) line+=1 -
保存文件
xl.save('Excel文件测试用2.xls')
结果:
2.csv文件文件操作
2.1简介:
相较于Excel文件,csv文件更易操作些,往往见到的数据文件在结构不是很复杂的情况下大都是csv文件
open 打开文件有多种模式,下面是常见的4种
r:读数据,默认模式
w:写数据,如果已有数据则会先清空
a:向文件末尾追加数据
x : 写数据,如果文件已存在则失败
第2至4种模式如果第一个参数指定的文件不存在,则会先创建一个空文件
2.2写操作
2.2.1写文件方法一(正常写入)
with open('csvFileTest2.csv', 'w', newline='') as f:
head = ['姓名', '分数']
rows = [
['张三', 80],
['李四', 90]
]
# 定义一个变量对文件进行写入
writer = csv.writer(f)
# 写入一行数据
writer.writerow(head)
# 写入多行数据
writer.writerows(rows)
2.2.2 写文件方法二(写入字典类型数据)
with open('csvFileTest2.csv', 'w', newline='') as f:
head = ['姓名', '分数']
rows = [
{'姓名': '张三', '分数': 80},
{'姓名': '李四', '分数': 90}
]
# 以字典形式写入数据
writer = csv.DictWriter(f, head)
writer.writeheader()
writer.writerows(rows)
2.3csv文件读
with open('csvFileTest2.csv') as f:
reader = csv.reader(f)
for row in reader:
print(row)