09-爬虫数据存取-Excel文件处理

四种数据存储部分:
1.JSON文件格式处理
2.CSV文件格式处理
3.Excel文件处理
4.MySQL数据库处理

 

Excle处理:
在爬虫开发中,我们主要关注Excel文件的读写,不会过多关心Excel中的一些样式。如果想要读写Excel文件,需要借助两个库xlrd 和xlwt,其中xlrd是用于读的,xlwt是用于写的

pip install xlrd
pip install xlwt

 

相关文档:

链接:https://pan.baidu.com/s/1TZU4GztH4LhqhbHVFK1W2g
提取码:j3kc
复制这段内容后打开百度网盘手机App,操作更方便哦

 

1.读取Excel文件
1>打开Excel文件

import xlrd

xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx")

2>获取Sheet

一个Excel中可能有多个Sheet,那么可以通过以下方法来获取想要的Sheet信息:

sheet_names:获取所有的sheet的名字

sheet_by_index:根据索引获取sheet对象

sheet_by_name:根据名字获取sheet对象

sheets:获取所有的sheet对象

sheet.nrows:这个sheet中的行数

sheet.ncols:这个sheet中的列数

# 读取Excel文件

import xlrd

# 打开excel文件
workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx")

# sheet_names函数,获取所有的sheet名字
print("获取所有的sheet名字:",workbook.sheet_names())

# sheet_by_index函数,根据索引获取sheet对象
sheet = workbook.sheet_by_index(1)
print("获取第二个sheet对象:{0}\tsheet对象的名字:{1}".format(sheet,sheet.name))

# sheet_by_name函数,根据名字获取sheet对象
sheet = workbook.sheet_by_name("2班")
print("获取名字为'2班'的sheet对象:{0}\tsheet对象的名字:{1}".format(sheet,sheet.name))

# sheets函数,获取所有的sheet对象
sheets = workbook.sheets()
sheets_name = [x.name for x in sheets]
print("获取所有的sheet对象:{0}\tsheet对象的名字:{1}".format(sheets,sheets_name))

# sheet.nrows函数,获取指定sheet的行数
sheet = workbook.sheet_by_index(0)
print("获取第一个sheet的行数:",sheet.nrows)

# sheet.ncols函数,获取指定sheet的列数
sheet = workbook.sheet_by_index(0)
print("获取第一个sheet的列数:",sheet.ncols)

3>获取Cell及其属性

每个Cell代表的是表格中的一格,一下方法可以方便获取到想要的cell:

sheet.cell(row,col):获取指定行和列的cell对象

sheet.row_slice(row,start_col,end_col):获取指定行的某几列的cell对象

sheet.col_slice(col,start_row,end_row):获取指定列的某几行的cell对象

sheet.cell_value(row,col):获取指定行和列的值

sheet.row_values(row,start_col,end_col):获取指定行的某几列的值

sheet.col_values(col,start_col,end_col):获取指定列的某几行的值

# Cell相关操作

import xlrd

workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx")

# sheet.cell(row,col),获取指定行和列的cell对象
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(0,0)
print("获取第一张表中,0行0列的cell对象:",cell.value)

sheet = workbook.sheet_by_index(1)
cell = sheet.cell(2,2)
print("获取第二张表中,韩信的数学成绩:",cell.value)

# sheet.row_slice(row,start_col,end_col),获取指定行的某几列的cell对象(注意:包头不包尾)
sheet = workbook.sheet_by_index(0)
cells = sheet.row_slice(2,1,4)
cell = [x.value for x in cells]
print("获取第一张表中,李建林的所有成绩:",cell)

# sheet.col_slice(col,start_row,end_row),获取指定列的某几行的cell对象(注意:包头不包尾)
sheet = workbook.sheet_by_index(0)
cells = sheet.col_slice(0,1,19)
cell = [x.value for x in cells]
print("获取第一张表中,所有人的名字:",cell)

# --------------------------------------------
# sheet.cell_value(row,col):获取指定行和列的值
sheet = workbook.sheet_by_index(1)
cell = sheet.cell_value(2,2)
print("\n获取第二张表中,韩信的数学成绩:",cell)

# sheet.row_values(row,start_col,end_col),获取指定行的某几列的值(注意:包头不包尾)
sheet = workbook.sheet_by_index(0)
cells = sheet.row_values(2,1,4)
print("获取第一张表中,李建林的所有成绩:",cells)

# sheet.col_values(col,start_row,end_row),获取指定列的某几行的值(注意:包头不包尾)
sheet = workbook.sheet_by_index(0)
cells = sheet.col_values(0,1,19)
print("获取第一张表中,所有人的名字:",cells)

4>Cell的数据类型

1:xlrd.XL_CELL_TEXT 文本类型
2:xlrd.XL_CELL_NUMBER 文本类型
3:xlrd.XL_CELL_DATE 文本类型:
4:xlrd.XL_BOOLEAN 文本类型:
0:xlrd.XL_CELL_EMPTY 文本类型:

# Cell的类型

import xlrd

workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx")

# 获取第一张表中,0行0列的cell类型(1:xlrd.XL_CELL_TEXT 文本类型)
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(0,0)
print("1:xlrd.XL_CELL_TEXT 文本类型:",cell.ctype,xlrd.XL_CELL_TEXT)

2.写入Excel步骤:
导入xlwt模块
创建一个Workbook对象
创建一个Sheet对象
使用sheet.write方法把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需要调用put_cell来添加
保存成Excel文件

# 写入Excel

import xlwt
import random

# 创建一个Workbook对象
workbook = xlwt.Workbook()

# 创建一个Sheet对象
sheet = workbook.add_sheet("sheet1")

# 表头
headers = ["学号","姓名","语文","数学","英语"]
# enumerate(headers)返回两个参数,一个索引index,一个对应的内容header
for index,header in enumerate(headers):
    sheet.write(0,index,header)

# 学生学号
ids = ["001","002","003"]
for index,id in enumerate(ids):
    sheet.write(index+1,0,id)
    
# 学生姓名
names = ["张三","李四","王五"]
for index,name in enumerate(names):
    sheet.write(index+1,1,name)
    
# 写入语文、数学、英语成绩
for row in range(1,4):
    for col in range(2,5):
      sheet.write(row,col,random.randint(1,100))  
    
    
# 保存Excel文件(注意:此使后缀名写.xls,写.xlsx会有问题)
workbook.save(r"F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls")
print("保存成功!")

3.编辑Excel步骤:

导入xlrd和xlwt模块

打开Excel文件

编辑Excel

写入到Excel(当前修改是在内存中进行)

# 编辑Excel,在F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls中最后一列添加一个总分,最后一行添加平均分

import xlrd
import xlwt

# 打开Excel文件
read_workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls")
read_sheet = read_workbook.sheet_by_index(0)

# 编辑Excel
# 1.最后一列添加一个总分
read_sheet.put_cell(0,5,xlrd.XL_CELL_TEXT,"总分",None)
nrows = read_sheet.nrows
for row in range(1,nrows):
    grades = read_sheet.row_values(row,2,6)
    total = sum(grades)
    # print(total)
    read_sheet.put_cell(row,5,xlrd.XL_CELL_NUMBER,total,None)
    
# 2.最后一行添加平均分 
read_sheet.put_cell(4,0,xlrd.XL_CELL_TEXT,"平均分",None)
ncols = read_sheet.ncols-1
for col in range(2,ncols):
    grades = read_sheet.col_values(col,1,4)
    aver = sum(grades)/len(grades)
    # print(aver)
    read_sheet.put_cell(4,col,xlrd.XL_CELL_NUMBER,aver,None)
    
# 写入到Excel(当前修改是在内存中进行)
write_workbook = xlwt.Workbook()
write_sheet = write_workbook.add_sheet("sheet1")
nrows = read_sheet.nrows
ncols = read_sheet.ncols
for row in range(0,nrows):
    for col in range(0,ncols):
        write_sheet.write(row,col,read_sheet.cell_value(row,col))
    
write_workbook.save(r"F:/爬虫/第四章-爬虫数据存储/我编辑的成绩表.xls")
print("编辑成功!")

 

posted @ 2021-03-09 20:35  马铃薯1  阅读(504)  评论(0编辑  收藏  举报