暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python爬虫-20-python如何操作excel,在excel中读取和写入数据

运维家 2022-06-01
1052

Excel
Microsoft
为使用Windows
Apple Macintosh
操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel
成为最流行的个人计算机数据处理软件。在1993
年,作为Microsoft Office
的组件发布了5.0版之后,Excel
就开始成为所适用操作平台上的电子制表软件的霸主。

1、介绍

excel
本身是有很多功能的,比如说格式调试,图表展示,公式计算等内容,但是对于我们在python
爬虫中,我们关注的仅仅是纯数据,其他的格式内容,咱们暂时不提。

我们使用python
操作excel
的时候,我们要使用两个模块,分别是xlrd
xlwt
,下面我们就分别使用python
下的pip
命令来安装下这两个模块。

2、安装

pip install xlrd=1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple

3、python读取excel表格

3.1 创建测试文件

首先我们先创建一个名字为ceshi.xlsx
的测试文件,以供我们使用,文件如下:


3.2 读取excel
中所有sheet
的信息

在这里有好几种方式,我们分别来尝试下;

(1)获取所有的sheet

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Names = Workbook.sheet_names()
print(Sheet_Names)

运行结果如下:

['汇总''姓名''年龄''地区''出生年月''爱好']

(2)根据索引获取sheet

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Names = Workbook.sheet_by_index(0)
print(Sheet_Names.name)

运行结果如下:

汇总

从上面我们可以看到,我们根据索引为“0”,获取到了第一个sheet
,那么同理,要获取第二个sheet
的话,我们是不是应该配置索引为“1”即可;

(3)根据名字获取sheet

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_name('出生年月')
print(Sheet_Name.name)

运行结果如下:

出生年月

(4)获取所有sheet
对象

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Names = Workbook.sheets()
print(Sheet_Names)
for i in Sheet_Names:
    print(i.name)

运行结果如下:

[<xlrd.sheet.Sheet object at 0x000001554E142E20>, <xlrd.sheet.Sheet object at 0x000001554E142F10>, <xlrd.sheet.Sheet object at 0x000001554E142F40>, <xlrd.sheet.Sheet object at 0x000001554E142F70>, <xlrd.sheet.Sheet object at 0x000001554E151A60>, <xlrd.sheet.Sheet object at 0x000001554E131DC0>]
汇总
姓名
年龄
地区
出生年月
爱好

3.3 获取该sheet
中的行数和列数

import xlrd

WorkBook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = WorkBook.sheet_by_name('汇总')
print("名字为{}的sheet中,一共有{}行".format(Sheet_Name.name, Sheet_Name.nrows))
print("名字为{}的sheet中,一共有{}列".format(Sheet_Name.name, Sheet_Name.ncols))

运行结果如下:

名字为汇总的sheet中,一共有9
名字为汇总的sheet中,一共有5

4、使用python获取excel中指定单元格的数据

Cell
就表示单元格,单元格也就是excel
中的最小单位,一个个小格子就是单元格。

且,在python
中,每一行和列都是从0开始,从左上角依次类推+1
的。

4.1 获取指定行和列的cell
对象

方法:

sheet.cell(row,col)

示例代码:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.cell(01))  # 获取第0行,第1列的数据,也就是B1单元格的数据

运行结果如下:

text:'年龄'

4.2 获取指定行的某几列的cell
对象

方法:

sheet.row_slice(row,start_col,end_col)

示例代码:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.row_slice(105))  # 获取第一行的0-5列之间的,不包括第5列

运行结果如下:

[text:'张三', number:18.0, text:'北京', xldate:36526.0, text:'吃饭']

4.3 获取指定列的某几行的cell
对象

方法:

sheet.col_slice(col,start_row,end_row)

示例代码如下:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.col_slice(005))  # 获取第0列的,0-5行之间的数据,不包括第5行

运行结果如下:

[text:'姓名', text:'张三', text:'李四', text:'王五', text:'赵六']

4.4 获取指定行和列的值

方法:

sheet.cell_value(row,col)

示例代码如下:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.cell_value(12))  # 获取第1行,第二列的单元格的数据,即C2的数据

运行结果如下:

北京

4.5 获取指定行的某几列的值

方法:

sheet.row_values(row,start_col,end_col)

示例代码如下:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.row_values(125))  # 获取第一行,第2-5列的值

运行结果如下 :

['北京''2000-1-1''吃饭']

4.6 获取指定列的某几行的值

方法:

sheet.col_values(col,start_row,end_row)

示例代码如下:

import xlrd

Workbook = xlrd.open_workbook('ceshi.xlsx')
Sheet_Name = Workbook.sheet_by_index(0)
print(Sheet_Name.col_values(403))  # 获取第4列,0-3行的值,不包括第三行

运行结果如下:

['爱好''吃饭''睡觉']

5、excel
Cell
的数据类型

  • xlrd.XL_CELL_TEXT(Text)
    :文本类型;
  • xlrd.XL_CELL_NUMBER(Number)
    :数值类型;
  • xlrd.XL_CELL_DATE(Date)
    :日期时间类型;
  • xlrd.XL_CELL_BOOLEAN(Bool)
    :布尔类型;
  • xlrd.XL_CELL_BLANK
    :空白数据类型。

6、使用python往excel中写入数据

6.1 步骤梳理

  • 导入xlwt
    模块
  • 创建一个Workbook
    对象
  • 创建一个Sheet
    对象
  • 使用sheet.write(row,col,data)
    方法把数据写入到Sheet
    下指定行和列中
  • 保存成Excel
    文件

6.2 示例代码

import xlwt
import random

Workbook = xlwt.Workbook(encoding='utf-8')
Sheet_Name = Workbook.add_sheet('运维家')
Headers = ['姓名''年龄''地区']
for index, Header in enumerate(Headers):
    Sheet_Name.write(0, index, Header)

Names = ['张三''李四''王五']
Areas = ['北京''山西''上海']

for index, Name in enumerate(Names):
    Sheet_Name.write(index + 10, Name)
    Sheet_Name.write(index + 11, random.randint(2040))
    Sheet_Name.write(index + 12, random.choice(Areas))

Workbook.save('ceshi2.xls')

运行之后,会生成一个名字为ceshi2.xls
的文件,我们打开看看是什么样子的,如下图:

从上面看,这个文件是符合我们的预期的。

7、使用python在已有的excel文件中新增内容

7.1 步骤梳理

  • 导入xlrd
    模块
  • 读取已有的excel
    文件,生成一个对象
  • 使用put_cell(self, rowx, colx, ctype, value, xf_index)
    方法添加数据
  • 导入xlwt
    模块
  • 新建一个workbook
    对象
  • 新建一个sheet
    对象
  • 将刚添加过数据的sheet
    每个单元格的数据读取出来,并写入到新的excel
    文件中
  • 保存excel
    文件

7.2 示例代码

import xlrd, xlwt

Workbook = xlrd.open_workbook('ceshi2.xls')
Sheet_Name = Workbook.sheet_by_index(0)
Sheet_Name.put_cell(40, xlrd.XL_CELL_TEXT, '赵六'None)
Sheet_Name.put_cell(41, xlrd.XL_CELL_TEXT, '30'None)
Sheet_Name.put_cell(42, xlrd.XL_CELL_TEXT, '吃饭'None)

Workbook_1 = xlwt.Workbook(encoding='utf-8')
Sheet_Name_1 = Workbook_1.add_sheet(Sheet_Name.name)
for row in range(Sheet_Name.nrows):
    for col in range(Sheet_Name.ncols):
        Sheet_Name_1.write(row, col, Sheet_Name.cell_value(row, col))

Workbook_1.save('ceshi3.xls')

运行之后,会生成一个ceshi3.xls
文件,不止将ceshi2.xls
文件中的内容放置到了ceshi3.xls
文件中,并新增了一行信息,如下图:

报错解决

报错一

xlrd.biffh.XLRDError: Excel xlsx file; not supported

这个意思是你的xlrd
版本太高了,卸载重新安装一个1.2.0
版本的就好了。

pip install xlrd==1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

支持,本文结束,更多相关内容每日更新。


文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论