Python如何处理Excel表格?良心推荐!

Stella981
• 阅读 730

Python如何处理Excel表格?良心推荐!

写在前面

Python常见的数据文件处理有5种,今天我们来讲讲其中的Excel如何处理!

Excel是大家工作当中使用频率比较高的一款办公软件了所以我们很有必要学习一下,那么Python是如何处理excel呢,下面就来讲讲~~

正文

Python如何处理Excel表格?良心推荐!

Python如何处理Excel表格?良心推荐!

1.两大库xlrd,xlwt

1).Python操作excel主要用到xlrd和xlwt这两个库

即xlrd是读excel,xlwt是写excel的库,名字也蛮好记得,xl是excel的缩写,rd是read,wt是write.xlrd可以解析微软的.xls and .xlsx两种各种的电子表格

2).如何安装

用pip install xlrd就可以安装xlrd模块

用pip install xlwt就可以安装xlwt模块

如果小伙伴是用Pycharm的话更简单,直接打开File/Setting/Project/Project Interpreter,然后选择左边的绿色加号安装

2.如何读一个excel文件

比如有这样一个"user_data.xlsx"表格,第一个sheet叫"data",内容如下:

Python如何处理Excel表格?良心推荐!

1).打开表格

file_name='user_data.xlsx'

excel_file=os.getcwd()+'\'+file_name

rdata=xlrd.open_workbook(excel_file)

print type(rdata)

>>

我们用open_workbook这个函数打开一个excel文件,并返回一个rdata对象,有同学好奇这个rdata是啥,我们type一下

发现data是:xlrd这个模块下面的book文件下面的Book类的实例对象

有点拗口,但确实是这样的,不信可以看源码

2).获取表格的基本信息

print 'sheets nums:',rdata.nsheets#excel sheets 个数

>>

sheets nums: 1

3).每个sheets名字

print 'sheets names:',rdata.sheet_names()#excel sheets 每个名字

>>

sheets names: [u'data']

4).每个sheet的行列总数,比如第一个sheet

sheet1=rdata.sheet_by_index(0)

print 'rows:',sheet1.nrows

print 'clos',sheet1.ncols

>>rows=11,cols=3

5),获取行,列的对象

获取第一行的内容

sh1=rdata.sheet_by_index(0)

print sh1.row(0)

>>

[text:u'\u65f6\u95f4', text:u'\u4eba\u6570']

print sh1.row_values(1)

>>

[u'\u65f6\u95f4', u'\u4eba\u6570']

#返回的是列表对象,中文会转成的unicode显示

获取第二列的内容

print sh1.col(1)

>>

[text:u'\u4eba\u6570', number:16.0, number:21.0,

number:34.0, number:48.0, number:30.0, number:36.0,

number:28.0, number:26.0, number:24.0, number:46.0]

#返回的是列表对象,text表示是文本对象,number是数字

>>print sh1.col_values(1)

[u'\u4eba\u6570', 16.0, 21.0, 34.0, 48.0, 30.0,

36.0, 28.0, 26.0, 24.0, 46.0]

我们可以利用列表切片访问:第二列到第5列

>>print sh1.col_values(1)[1:5]

[16.0, 21.0, 34.0, 48.0]

也可以利用默认的col_values参数

col_values(self, colx, start_rowx=0, end_rowx=None)

print sh1.col_values(1,1,5)

>>

[16.0, 21.0, 34.0, 48.0]

6).获取单元格cell的内容

xlrd对excel里面内容分成下面7种的,是枚举类型

(

XL_CELL_EMPTY,

XL_CELL_TEXT,

XL_CELL_NUMBER,

XL_CELL_DATE,

XL_CELL_BOOLEAN,

XL_CELL_ERROR,

XL_CELL_BLANK, # for use in debugging, gathering stats, etc

) = range(7)

我们来看一下,第一行第一列的单元格是个字符串

sh1=rdata.sheet_by_index(0)

cell_0_0=sh1.cell(0,0)

print cell_0_0

print cell_0_0.ctype

print cell_0_0.value

>>

text:u'\u65f6\u95f4'

1

时间

#1确实对应的是文本

我们来看一下,第二行第一列的单元格:日期

cell_1_0=sh1.cell(1,0)

print cell_1_0

print cell_1_0.ctype

print cell_1_0.value

>>

xldate:42736.0

3

42736.0

#3确实对应的是日期 (有小伙伴问日期怎么变成这个数字,

#因为日期被转换成了xldate对象,一会我们会转换回来,后面会详细讲)

我们来看一下,第二行第二列的单元格:数字

cell_1_1=sh1.cell(1,1)

print cell_1_1

print cell_1_1.ctype

>>

number:16.0

2

16.0

#2确实对应的是日期 (有小伙伴问日期怎么变成这个数字,不急后面会讲)

3.如何写数据进表格

主要是用xlwt模块,现在我们要把上面的'data.xlsx'表格中人数1和人数2相加等于总数列,并写入到一个新的excel文件中去.

1).读取'data.xlsx'中sheet1的数据

import xlrd

import os

file_name='data.xlsx'

excel_file=os.getcwd()+'\'+file_name

rdata=xlrd.open_workbook(excel_file)

sh1=rdata.sheet_by_index(0)

2).创建一个wbook对象,生成一个新的sheet

import xlwt

wbook=xlwt.Workbook()

wsheet=wbook.add_sheet(sh1.name)

3).在写入第一行,标题栏

wsheet这个函数(row,col,value,style),这个style其实就是这个内容单元格的格式

style=xlwt.easyxf('align: vertical center, horizontal center')

wsheet.write(0,0,u'时间',style)

wsheet.write(0,1,u'人数1',style)

wsheet.write(0,2,u'人数2',style)

wsheet.write(0,3,u'总分',style)

4).写入时间列的数据,需要转化数据格式

上面读表格的时候,我们遗留了一个问题,就是第一列的日期

为啥打印出来,会变成奇怪的数据

其实那个是xldate对象,我们需要把sheet1里面的内容提取处理,然后转成日期数

Python如何处理Excel表格?良心推荐!

5).计算第二列和第三列的数据,得到总分

Python如何处理Excel表格?良心推荐!

6).把sheet1里面的第二列,第三列和总分的数据写入excel文件

Python如何处理Excel表格?良心推荐!

7).写成文件new_data.xls

try:

wbook.save('new_data.xls')

except Exception as e:

print e

else:

print 'write excel file successful

运行一下,打开新的表格new_data.xls

Python如何处理Excel表格?良心推荐!

写在后面

不知道大家看了文章会不会操作了呢?

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这