爬虫:数据储存Excel文件

读取Excel文件

在爬虫中,我们主要关注Excel文件的读写,不会太关心excel的一些样式(居中对齐啥的)。如果想要读写excel文件,需要安装两个库,xlrd(读) xlwt(写)

  • 打开excel文件:xlrd.open_workbook('abc.xls')
  • 获取sheet:一个excel中可能有多个sheet(页面吧),可以通过以下方法获取sheet信息
方法含义
sheet_names()获取所有sheet的名字
sheet_by_index()根据索引获取sheet对象
sheet_by_name()根据名字获取sheet对象
sheets()获取所有的sheet对象
sheet.nrows这个sheet的行数
sheet.ncols这个sheet中的列数
import xlrd

workbook = xlrd.open_workbook("成绩表.xlsx")

# 根据索引获取指定的sheet对象
sheet = workbook.sheet_by_index(1) # 从零开始
print(sheet.name)

# 获取所有的sheet对象
sheets = workbook.sheets()
for sheet in sheets:
    print(sheet.name)

# 获取指定sheet的行数和列数
sheet = workbook.sheet_by_index(0)
print({"rows":sheet.nrows,"cols":sheet.ncols})

获取cell及属性

每个cell 代表了表格中的一格

sheet = workbook.sheet_by_index(0)       # 获取第一个sheet
cell = sheet.cell(1,1)   # 获取指定行和列的cell对象,第二行第二列
print(type(cell))
>>><class 'xlrd.sheet.Cell'>

cells = sheet.row_slice(1,1,4)   # 获取指定行的某几列的cell对象(row,start_col,end_col),跟range一样不包括第四列
for cell in cells:
    print(cell.value)

cells = sheet.col_slice(0,1,sheet.nrows)  # 指定列的某几行,sheet.nrows获取所有行
for cell in cells:
    print(cell.value)

cell_value = sheet.cell_value(0,1)  # 获取指定的行和列
print(cell_value)

cell_values = sheet.col_values(1,1,sheet.nrows)  # 获取指定行列的某几行的值
print(cell_values)								# 获得列表

cell_values = sheet.row_values(1,1,sheet.ncols)   # 获取指定行的某几列的值
print(cell_values)

cell 的数据类型

方法类型
xlrd.XL_CELL_TEXT文本类型
xlrd.XL_CELL_NUMBER数值类型
wlrd.XL_CELL_DATE日期时间类型
xlrd.XL_CELL_BOOLEAN布尔类型
xlrd.XL_CELL_EMPTY空白数据类型
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(0,0)
print(cell.ctype)                  # 获取文本类型

print(xlrd.XL_CELL_TEXT)            # text类型对应 1,这个变量本质就是 1
print(xlrd.XL_CELL_NUMBER)          # 对应 2
print(xlrd.XL_CELL_DATE)         # 3
print(xlrd.XL_CELL_BOOLEAN)       # 4
print(xlrd.XL_CELL_EMPTY)            # 5

写入excel文件

脑部链接这个博客详细的介绍了写入excel文件的操作,就像设置字体样式,单元格颜色大小,添加日期公式超链接之类的,有兴趣的朋友可以去看看啊。。。。。。

  1. 导入xlwt模块
  2. 创建workbook对象
  3. 创建sheet对象
  4. 使用sheet.write方法吧数据写入sheet下指定行和列中,如果想在workbook对象上添加新cell,调用put_cell来添加
  5. 保存excel文件
import xlwt

workbook = xlwt.Workbook()   # xlwt.Workbook(encoding ='')
sheet = workbook.add_sheet('sheet1')
headers = ['姓名','语文'.'数学'.'英语']
for index,header in enumerate(headers):   # eunmerate循环出两个参数,一个是对应的索引,一个是内容
	sheet.write(0,index,headers)     # sheet.wirte(row,col,content)

names = ['张三','李四','王五')
for index,names in enumerate(headers):   # 也可以使用enumerate(headers,start=1)  start -- 下标起始位置
	sheet.write(index+1,0,names)    # 要将姓名写到第一行

# 写入时要关闭文件的
workbook.save('成绩表.xls')

编辑excel文件

  1. 读取原来的excel文件
  2. 在读取的sheet上面进行cell的修改,可以使用sheet.put_cell()来实现
  3. 在重新创建一个新的excel文件来保存
import xlrd
import xlwt
rwb = xlrd.open_workbook('成绩表.xlsx')
rsheet = rwb.sheet_by_index(0)

# 求每个学生的总分
rsheet.put_cell(0,4,xlrd.XL_CELL_TEXT,'总分',None)   # put_cell(rowx,clox,ctype,value,xf_iindex) 最后一个参数是设置样式的,None就好
# 增加一个表头
for row in range(1,rsheet.nrows):
	grades = rsheet.row_values(row,1,4)  # 第row行,从第一列到第三例的数据
	total = sum(grades)
	sheet.put_cell(row,4,xlrd.XL_CELL_NUMBER,total,None)
# 现在的数据是在内存中,所以还要保存到新的文件里

# 求每个科目的平均分
for col in range(1,sheet.ncols):
	grade = rsheet.col_value(col,1,rsheet.nrows)  # 获取col列的第一行到最后一行的数据
	avg = sum(grade)/len(grade)
	rsheet.put_cell(rsheet.nrows,col,xlrd.XL_CELL_NUMBER,avg,None)

wwb = xlwt.Workbook()
wsheet = wwb.add_sheet('sheet1')
for row in range(1,rsheet.nrows):     # 将rsheet里的所有cell复制到sheet1中
	for col in range(0,rsheet.ncols):
		wsheet.write(row,col,rsheet.cell_value(row,col))
wwb.save('abc.xls')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值