python中读写excel_python读写Excel

Python读写excel

对于python 处理excel 表格,这个日常工作的需求还是不少,于是查查资料,自己写写,总结一下,记录一下,下次遇到直接拿过来用,方便自己,方便大家。

好在python有读写excel package很方便。

xlrd:用于读Excel文件

xlwt:写Excel包,文件后缀名为.xls,最多只能存65536行数据(2的16次方)

xlsxwriter:也是写Excel包,文件后缀名.xlsx,最大支持1048576(2的20次方)行数据,16384(2的14次方)列数据

openpyxl:既能读也能写,非常厉害,还能插入删除一行一列,后缀名是.xlsx

一,xlrd,xlwt 使用

## 1,导入模块

import xlrd

## 2, 打开Excel文件读取数据

data = xlrd.open_workbook('excel.xls')

##3,获取一个工作表

table = data.sheets()[0] #通过索引顺序获取

table = data.sheet_by_index(0) #通过索引顺序获取

table = data.sheet_by_name(u'Sheet1')#通过名称获取

## 4,获取整行和整列的值(返回数组)

table.row_values(i)

table.col_values(i)

## 5,获取行数和列数

table.nrows

table.ncols

## 6,获取单元格

table.cell(0,0).value

table.cell(2,3).value

就我自己使用的时候觉得还是获取cell最有用,这就相当于是给了你一个二维数组,余下你就可以想怎么干就怎么干了。得益于这个十分好用的库代码很是简洁。但是还是有若干坑的存在导致话了一定时间探索。现在列出来:

1、首先就是我的统计是根据姓名统计各个表中的信息的,但是调试发现不同的表中各个名字貌似不能够匹配,开始怀疑过编码问题,不过后来发现是因为空格。因为在excel中输入的时候很可能会顺手在一些名字后面加上几个空格或是tab键,这样看起来没什么差别,但是程序处理的时候这就是两个完全不同的串了。我的解决方法是给每个获取的字符串都加上strip()处理一下。效果良好

2、还是字符串的匹配,在判断某个单元格中的字符串(中文)是否等于我所给出的的时候发现无法匹配,并且各种unicode也不太奏效,百度过一些解决方案,但是都比较复杂或是没用。最后我采用了一个比较变通的方式:直接从excel中获取我想要的值再进行比较,效果是不错就是通用行不太好,不过问题还没解决。

#导入xlwt模块

import xlwt

# 创建一个Workbook对象,这就相当于创建了一个Excel文件

book = xlwt.Workbook(encoding='utf-8', style_compression=0)

'''

Workbook类初始化时有encoding和style_compression参数

encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。

默认是ascii。当然要记得在文件头部添加:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

style_compression:表示是否压缩,不常用。

'''

#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。

# 在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表

sheet = book.add_sheet('test', cell_overwrite_ok=True)

# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False

# 向表test中添加数据

sheet.write(0, 0, 'EnglishName') # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容

sheet.write(1, 0, 'Marcovaldo')

txt1 = '中文名字'

sheet.write(0, 1, txt1.decode('utf-8')) # 此处需要将中文字符串解码成unicode码,否则会报错

txt2 = '马可瓦多'

sheet.write(1, 1, txt2.decode('utf-8'))

# 最后,将以上操作保存到指定的Excel文件中

book.save(r'e:\test1.xls') # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错

建议还是用ascii编码,不然可能会有一些诡异的现象。

二,xlsxwriter使用

#coding:utf-8

import xlsxwriter

workbook=xlsxwriter.Workbook('demo1.xlsx')#创建一个excel文件

worksheet=workbook.add_worksheet(u'sheet1')#在文件中创建一个名为TEST的sheet,不加名字默认为sheet1

worksheet.set_column('A:A',20)#设置第一列宽度为20像素

bold=workbook.add_format({'bold':True})#设置一个加粗的格式对象

worksheet.write('A1','HELLO')#在A1单元格写上HELLO

worksheet.write('A2','WORLD',bold)#在A2上写上WORLD,并且设置为加粗

worksheet.write('B2',U'中文测试',bold)#在B2上写上中文加粗

worksheet.write(2,0,32)#使用行列的方式写上数字32,35,5

worksheet.write(3,0,35.5)#使用行列的时候第一行起始为0,所以2,0代表着第三行的第一列,等价于A4

worksheet.write(4,0,'=SUM(A3:A4)')#写上excel公式

workbook.close()

三,用openpyxl向Excel插入一行或一列

功能非常强大,文档主页点这里

插入列用insert_cols

插入行用insert_rows

读并加一列示例:

import openpyxl

wb = openpyxl.load_workbook('0.xlsx')

ws = wb.worksheets[0]

# 在第3列之前插入数据,这里序号是从1开始的

ws.insert_cols(3)

# 插入数据

for index, row in enumerate(ws.rows):#按行读取

if index == 0:

row[2].value = '新字段'

else:

row[2].value = index

wb.save('0_new.xlsx')

写示例:

import openpyxl

wb = openpyxl.Workbook()#创建一个表

sheet = wb.active#找到活动sheet页,

sheet.title = 'New Sheet'

sheet['C3'] = 'hello world'#这里读取是一样的,按cell读

for i in range(10):

sheet["A%d" % (i+1)].value = i + 1

sheet["E1"].value = "=SUM(A:A)"#还可以写公式

wb.save('新的excel.xlsx')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# asp.net mvc 开发的正方教务助手(二)

在上一篇文章展示了项目实际运行情况 现在我们来分析该项目如何完成的: 第一步:登陆你们的教务,这是我们学习的教务的主页http://jw.svtcc.edu.cn/Default2.aspx,进去之后,打开使用火狐浏览器进行登陆分析 在火狐浏览…

[html] 如何禁止input输入的历史记录?

[html] 如何禁止input输入的历史记录? 给form加上 autocompleteoff 可以禁止整个表单的历史记录给单个input加上 autocompleteoff 可禁止这个input的历史记录个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。…

单独安装想要的office_安装OFFICE不再求人,最省心的方法

强烈建议选择office部署工具Office Tool Plus 不建议选择微软官方的office 2016部署工具 因为还需要手动更改代码,不利于新手安装。office tool plus它能够帮助用户轻松的在线下载安装 Office 的各个版本,安装过程中用户可以自由选择安装哪些需要使用的组…

{php mysql}

###1.连接数据库服务器函数(2个): mysql_connect,mysql_pconnect (1).mysql_connect() 格式:int mysql_connect(string [hostname] [:port],string [username],string [password]); hostname // * 服务器名username // * 服务器…

C# MVC的博客开发(一)登录

由于前端使用的是layui的模板,该模板自带登录和注册页面,但是此页面的登录和普通页面的登录有些不同登录后返回的数据也需要处理,这里我来整理下layui登录时候遇到的问题首先登录提交数据的js我们在login.html并没有找到,form提交…

案例八:shell自动化管理账本脚本

该脚本目的帮助管理员创建账号、删除账号、锁定账号、解锁账号。 #!/bin/bash #filename: #author: #date:2018-6-6 echo "用户管理程序" echo "1.创建用户" echo "2.删除用户" echo "3.锁定用户" echo "4.解锁用户" echo &…

小甲鱼python课后题007_[Python]小甲鱼Python视频第007-008课(了不起的分支和循环)课后题及参考解答...

# -*- coding: utf-8 -*- """ Created on Mon Mar 4 23:35:19 2019 author: fengs """ """ 测试题: 0. if not (money < 100): 上边这行代码相当于&#xff1f; if money > 100: 1. assert 的作用是什么&#xff1f; 断言功…

C# MVC的博客开发(二)登录

解决了登录数据在哪里提交的问题我们进行后台的登录的编写和实现后台登录代码我就不详细讲解了就是把传输过去的数据和数据库进行匹配如果存在就返回一个值如果不存在就另外一个值但是登录的时候我们可能遇到用户输入的用户密码不对或者其他的错误&#xff0c;官网的首页输入密…

程序员买房--续

上海是高房价的代表&#xff0c;其高耸云霄的房价的确不足以客观代表普遍水平。那么我们以内地稍稍低调的二线城市郑州为例&#xff0c;探讨工薪阶层是否能够征服房价&#xff0c;幸福快乐的生活。 郑州市2011年房均价位6000 &#xff0c;或许很多人会惊呼&#xff0c;这么便宜…

ASP.NET知识结构

ASP.NET知识结构 https://blog.csdn.net/yaolong168888/article/details/80126541 转载于:https://www.cnblogs.com/iamspecialone/p/11220086.html

C# MVC的博客开发(三)注册

在做注册的时候博主遇到了个很坑爹的问题 那就是本地发送邮件正常可是搬运到阿里云服务器发送邮件就gg了查询了很久才知道阿里云默认是把25发送邮件端口给封了 也就是说放在阿里云服务器的发送邮件是无法以无ssl加密的方式发送的&#xff0c;必须通过ssl家里的465端口去发送邮件…

python中if有几种使用方式_python 中if-else的多种简洁的写法

原博文 2017-11-02 15:18 − 因写多了判断语句&#xff0c;看着短短的代码却占据来好几行&#xff0c;于是便搜下if-else简洁的写法&#xff0c;结果也是发现新大陆 4种&#xff1a; 第1种:__就是普通写法 a, b, c 1, 2, 3 if a>b: c a else: c b 第二种&#xff1a;一行…

[html] 怎样避免让用户看到长时间的白屏?

[html] 怎样避免让用户看到长时间的白屏&#xff1f; 我觉得&#xff0c;实际解决办法需要结合用户体验和性能优化这两个指标来说&#xff1a;1、用户体验可以使用骨架屏来减少页面白屏&#xff0c;骨架屏也具有更好的loading效果。2、假如1个页面里面有很多很多网络请求&…

Markdown_LaTex_极限符号

IDE&#xff1a;Typora 内容&#xff1a;极限符号 \[\lim\limits_{x\rightarrow\infty}\frac{1}{x}\] $$\lim\limits_{x\rightarrow\infty}\frac{1}{x}$$解释:极限符号部分分数部分 极限部分\lim\limits_{x\rightarrow\infty} \[\lim\limits_{x\rightarrow\infty}\] 分数部分\f…

感谢博客园让我拥有自己的空间

申请的时候&#xff0c;一看需要审核&#xff0c;着实吓着了&#xff0c;除了QQ空间&#xff0c;从来没有申请过其它任何博客&#xff0c;不管如何&#xff0c;首先感谢博客园让我有了一个记录学习、生活的地方转载于:https://www.cnblogs.com/Delphi-Farmer/archive/2011/06/0…

python多行字符串输入_python中怎么输入多行字符串

Python中输入多行字符串&#xff1a; 方法一&#xff1a;使用三引号>>> str1 Le vent se lve, il faut tenter de vivre. 起风了&#xff0c;唯有努力生存。 &#xff08;纵有疾风起&#xff0c;人生不言弃。&#xff09; >>> str1 Le vent se lve, il faut…

C# MVC使用阿里云对象存储加快图片加载速度(一)

公司有个点餐的项目有大量的图片需要在扫码后的网页进行加载&#xff0c;刚开始使用的客户少的时候公司的4核8G&#xff0c;5M带宽的服务器还能挺快的加载图片和网页&#xff0c;但是客户一多&#xff0c;由于客户大多是快餐行业的&#xff0c;中午点餐的人数是相当多的&#x…

[html] html5点击返回键怎样不让它返回上一页

[html] html5点击返回键怎样不让它返回上一页 $(function() {if (window.history && window.history.pushState) {$(window).on(popstate, function () {window.history.pushState(forward, null, #);window.history.forward(1);});}window.history.pushState(forward,…

自动单击按钮

Delphi中FindWindow,FindWindowEx,SendMessage妙用: var i,j,k:integer; begin i:FindWindow(nil,与 ●┌哒!ňg 聊天中); //查找主窗口 j:FindWindowEx(i,0,#32770,); k:FindWindowEx(j,0,Button,消息模式(&T)); SendMessage(k,BM_CLICK,0,0…

[html] iframe父页面如何获取子页面的元素?

[html] iframe父页面如何获取子页面的元素&#xff1f; window.frames["iframe的id"].contentDocument.getElementsByClassName("classname")document.getElementById(myiframe).contentWindow.document.getElementsByClassName("classname")$(w…