利用Python进行读写Excel文件_good_learn的博客-程序员秘密

技术标签: python  数据分析  

Python作为一种脚本语言相较于shell具有更强大的文件处理能力,一般shell在处理纯文本文件时较为实用,而对特殊文件的处理如excel表格则Python会更得心应手,主要体现在它可以调用很多第三方功能包来实现我们想要的功能,Python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别:

  • 用xlrd和xlwt进行excel读写;
  • 用openpyxl进行excel读写;
  • 用pandas进行excel读写;

为了方便演示,我这里新建了一个data.xlsx文件,第一个工作表sheet1区域“A1:C19”的内容如下,用于测试读excel的代码:

Update Date AP Version MD Version
2018/6/25 alps-mp-o1.mp1-V1.132.2 MOLY.LR12A.R2.MP.V34.15---MOLY.LR12A.R3.MP.V14.4
2018/6/11 alps-mp-o1.mp1-V1.122 MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2
2018/5/29 alps-mp-o1.mp1-V1.112 MOLY.LR12A.R2.MP.V30.8---MOLY.LR12A.R3.MP.V10.3
2018/5/15 alps-mp-o1.mp1-V1.102 MOLY.LR12A.R2.MP.V28.1---MOLY.LR12A.R3.MP.V8
2018/5/2 alps-mp-o1.mp1-V1.92 MOLY.LR12A.R2.MP.V26.1--MOLY.LR12A.R3.MP.V6
2018/4/17 alps-mp-o1.mp1-V1.82 MOLY.LR12A.R2.MP.V24.1
2018/4/13 alps-mp-o1.mp1-V1.74 MOLY.LR12A.R2.MP.V22.1
2018/3/29 alps-mp-o1.mp1-V1.69 MOLY.LR12A.R2.MP.V21
2018/3/20 alps-mp-o1.mp1-V1.64 MOLY.LR12A.R2.MP.V20.1
2018/3/15 alps-mp-o1.mp1-V1.59 MOLY.LR12A.R2.MP.V19
2018/3/7 alps-mp-o1.mp1-V1.54 MOLY.LR12A.R2.MP.V18
2018/2/27 alps-mp-o1.mp1-V1.42 MOLY.LR12A.R2.MP.V15
2018/2/8 alps-mp-o1.mp1-V1.37 MOLY.LR12A.R2.MP.V14
2018/2/1 alps-mp-o1.mp1-V1.30 MOLY.LR12A.R2.MP.V13
2018/1/25 alps-mp-o1.mp1-V1.24.1 MOLY.LR12A.R2.MP.V12.6
2018/1/12 alps-mp-o1.mp1-V1.12 MOLY.LR12A.R2.MP.V10.6
2018/1/9 alps-mp-o1.mp1-V1.4 MOLY.LR12A.R2.MP.V9
2017/12/26 alps-mp-o1.mp1-V1 MOLY.LR12A.R2.MP.V8.6


首先是安装第三方模块xlrd和xlwt,直接输入命令"sudo pip install xlrd"和"sudo pip install xlwt"就行,如下:1 利用xlrd和xlwt进行excel读写(xlwt不支持xlsx)

 

1.1 xlrd读excel

# encoding: utf-8

import xlrd
book = xlrd.open_workbook('data.xlsx')
sheet1 = book.sheets()[0]
nrows = sheet1.nrows
print u'表格总行数 ',nrows
ncols = sheet1.ncols
print u'表格总列数 ',ncols
row3_values = sheet1.row_values(2)
print u'第3行值 ',row3_values
col3_values = sheet1.col_values(2)
print u'第3列值 ',col3_values
cell_3_3 = sheet1.cell(2,2).value
print u'第3行第3列的单元格的值:',cell_3_3

运行结果

表格总行数  19
表格总列数  3
第3行值  [u'2018/6/11', u'alps-mp-o1.mp1-V1.122', u'MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2']
第3列值  [u'MD\u7248\u672c', u'MOLY.LR12A.R2.MP.V34.15---MOLY.LR12A.R3.MP.V14.4', u'MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2', u'MOLY.LR12A.R2.MP.V30.8---MOLY.LR12A.R3.MP.V10.3', u'MOLY.LR12A.R2.MP.V28.1---MOLY.LR12A.R3.MP.V8', u'MOLY.LR12A.R2.MP.V26.1--MOLY.LR12A.R3.MP.V6', u'MOLY.LR12A.R2.MP.V24.1', u'MOLY.LR12A.R2.MP.V22.1', u'MOLY.LR12A.R2.MP.V21', u'MOLY.LR12A.R2.MP.V20.1', u'MOLY.LR12A.R2.MP.V19', u'MOLY.LR12A.R2.MP.V18', u'MOLY.LR12A.R2.MP.V15', u'MOLY.LR12A.R2.MP.V14', u'MOLY.LR12A.R2.MP.V13', u'MOLY.LR12A.R2.MP.V12.6', u'MOLY.LR12A.R2.MP.V10.6', u'MOLY.LR12A.R2.MP.V9', u'MOLY.LR12A.R2.MP.V8.6']
第3行第3列的单元格的值: MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2

1.2 xlwt写excel

主要代码如下,很简单:

import xlwt  # 不支持excel2007的xlsx格式

workbook = xlwt.Workbook()

worksheet = workbook.add_sheet('test')

worksheet.write(0,0,'A1data')

workbook.save('excelwrite.xls')

程序运行后,新建excelwrite.xls工作簿并插入text工作表,A1的内容为A1data。

2 利用openpyxl读写excel,注意这里只能是xlsx类型的excel

安装的话,直接输入命令"sudo pip install openpyxl"就行,很快就能安装完毕。

2.1 读excel

# encoding: utf-8
from openpyxl.reader.excel import load_workbook

workbook = load_workbook('data.xlsx')
worksheet = workbook.worksheets[0]
row3=[item.value for item in list(worksheet.rows)[2]]
print u'第3行值',row3
col3=[item.value for item in list(worksheet.columns)[2]]
print u'第3行值',col3
cell_2_3=worksheet.cell(row=2,column=3).value
print u'第2行第3列值',cell_2_3
max_row=worksheet.max_row
print u'最大行',max_row

运行结果:

第3行值 [u'2018/6/11', u'alps-mp-o1.mp1-V1.122', u'MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2']
第3行值 [u'MD Version', u'MOLY.LR12A.R2.MP.V34.15---MOLY.LR12A.R3.MP.V14.4', u'MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2', u'MOLY.LR12A.R2.MP.V30.8---MOLY.LR12A.R3.MP.V10.3', u'MOLY.LR12A.R2.MP.V28.1---MOLY.LR12A.R3.MP.V8', u'MOLY.LR12A.R2.MP.V26.1--MOLY.LR12A.R3.MP.V6', u'MOLY.LR12A.R2.MP.V24.1', u'MOLY.LR12A.R2.MP.V22.1', u'MOLY.LR12A.R2.MP.V21', u'MOLY.LR12A.R2.MP.V20.1', u'MOLY.LR12A.R2.MP.V19', u'MOLY.LR12A.R2.MP.V18', u'MOLY.LR12A.R2.MP.V15', u'MOLY.LR12A.R2.MP.V14', u'MOLY.LR12A.R2.MP.V13', u'MOLY.LR12A.R2.MP.V12.6', u'MOLY.LR12A.R2.MP.V10.6', u'MOLY.LR12A.R2.MP.V9', u'MOLY.LR12A.R2.MP.V8.6']
第2行第3列值 MOLY.LR12A.R2.MP.V34.15---MOLY.LR12A.R3.MP.V14.4
最大行 19

2.2 写excel

主要代码如下:

import openpyxl

workbook = openpyxl.Workbook()

sheet=workbook.active

sheet['A1']='hi,wyu'

workbook.save('new.xlsx')

程序运行后,新建new.xls工作簿并插入sheet工作表,A1的内容为hi,wyu。

3 利用pandas读取excel

Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。

首先要安装pandas模块,用sudo pip install pandas安装。

pandas是一个数据处理的包,本身提供了许多读取文件的函数,像read_csv(读取csv文件),read_excel(读取excel文件)等,只需一行代码就能实现文件的读取

3.1 读excel

主要代码如下,就1行代码搞定,注意这里的data是DataFrame类型:

import pandas as pd

df = pd.read_excel(r'data.xlsx',sheetname=0)

print(df)

运行结果:

Update Date               AP Version                                        MD Version
0    2018/6/25  alps-mp-o1.mp1-V1.132.2  MOLY.LR12A.R2.MP.V34.15---MOLY.LR12A.R3.MP.V14.4
1    2018/6/11    alps-mp-o1.mp1-V1.122   MOLY.LR12A.R2.MP.V32.5---MOLY.LR12A.R3.MP.V12.2
2    2018/5/29    alps-mp-o1.mp1-V1.112   MOLY.LR12A.R2.MP.V30.8---MOLY.LR12A.R3.MP.V10.3
3    2018/5/15    alps-mp-o1.mp1-V1.102      MOLY.LR12A.R2.MP.V28.1---MOLY.LR12A.R3.MP.V8
4     2018/5/2     alps-mp-o1.mp1-V1.92       MOLY.LR12A.R2.MP.V26.1--MOLY.LR12A.R3.MP.V6
5    2018/4/17     alps-mp-o1.mp1-V1.82                            MOLY.LR12A.R2.MP.V24.1
6    2018/4/13     alps-mp-o1.mp1-V1.74                            MOLY.LR12A.R2.MP.V22.1
7    2018/3/29     alps-mp-o1.mp1-V1.69                              MOLY.LR12A.R2.MP.V21
8    2018/3/20     alps-mp-o1.mp1-V1.64                            MOLY.LR12A.R2.MP.V20.1
9    2018/3/15     alps-mp-o1.mp1-V1.59                              MOLY.LR12A.R2.MP.V19
10    2018/3/7     alps-mp-o1.mp1-V1.54                              MOLY.LR12A.R2.MP.V18
11   2018/2/27     alps-mp-o1.mp1-V1.42                              MOLY.LR12A.R2.MP.V15
12    2018/2/8     alps-mp-o1.mp1-V1.37                              MOLY.LR12A.R2.MP.V14
13    2018/2/1     alps-mp-o1.mp1-V1.30                              MOLY.LR12A.R2.MP.V13
14   2018/1/25   alps-mp-o1.mp1-V1.24.1                            MOLY.LR12A.R2.MP.V12.6
15   2018/1/12     alps-mp-o1.mp1-V1.12                            MOLY.LR12A.R2.MP.V10.6
16    2018/1/9      alps-mp-o1.mp1-V1.4                               MOLY.LR12A.R2.MP.V9
17  2017/12/26        alps-mp-o1.mp1-V1                             MOLY.LR12A.R2.MP.V8.6

3.2 写excel

主要代码如下:

# encoding: utf-8
from pandas import DataFrame

data={
'name':[u'张三',u'李四',u'王五'],
'age':[21,22,23],
'sex':[u'男',u'女',u'男']
}
df=DataFrame(data)
df.to_excel('new.xlsx')

程序运行后,将新建(或替换)new.xlsx文件,并在工作表sheet1的A1:D4区域中保存内容如下:

    age    name    sex
0    21    张三    男
1    22    李四    女
2    23    王五    男

至此,我们就完成了excel的读写。总的来说,这3种方法都很简单,尤其是第3种方法,1行代码就搞定,在数据处理中,经常会用到pandas这个包(该包可以处理众多常见的数据存储格式,如CSV、JSON等),功能很强大,当然还有许多其他的包也可以完成excel的读写。

  •                     <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
                        </svg><span class="name">点赞</span>
                        <span class="count">4</span>
                        </a></li>
                        <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
                        </svg><span class="name">收藏</span></a></li>
                        <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                            <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
                        </svg>分享</a></li>
                        <!--打赏开始-->
                                                <!--打赏结束-->
                                                <li class="tool-item tool-more">
                            <a>
                            <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                            </a>
                            <ul class="more-box">
                                <li class="item"><a class="article-report">文章举报</a></li>
                            </ul>
                        </li>
                                            </ul>
                </div>
                            </div>
            <div class="person-messagebox">
                <div class="left-message"><a href="https://blog.csdn.net/best2012power">
                    <img src="https://profile.csdnimg.cn/D/5/F/3_best2012power" class="avatar_pic" username="best2012power">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/1x/7.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/best2012power" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">彧侠</a></span>
                                            </div>
                    <div class="text"><span>发布了16 篇原创文章</span> · <span>获赞 11</span> · <span>访问量 3万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=best2012power" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                        </a>
                                                            <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    </article>
    
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/good_learner_1/article/details/103723602

智能推荐

java的进制换算_0125怎么换成八进制_CJW-Coder的博客-程序员秘密

1.进制  进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。2.进制的表现形式    二进制: 由0和1两个数字组成。  八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。  十进制: 都是以0-9这九个数字组成,不能以0开头。  十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以0x或0X开始。3.进制之间的转...

View 中requestLayout 和 invalidate,postinvalidate() 区别_ahubenkui的博客-程序员秘密

前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。requestLayout当我们动态移动一个View的位置,或者View的大小、形状发生了变化的时候,我们可以在

Jenkins初始化设置_雨云21的博客-程序员秘密

1、登录进Jenkins后,点击图中所示位置

Publish/Subscribe_weixin_30312659的博客-程序员秘密

Publish/Subscribe我们将会投递一个消息给多个消费者,这种模式被称为“publish/subscribe”通俗的讲,前面的是点对点队列模型,现在讲的是发布订阅模型。Exchangesproducer:一个发送消息的用户应用程序queue:一个存储消息的缓冲区consumer:一个接收消息的用户应用程序在RabbitMQ的消息模型中,一个核心的概念是,生产者...

Kotlin学习-基础-数据类型_openJK-dev的博客-程序员秘密

Kotlin的数据类型有:数字、字符、布尔值、数组和字符串。1、数字kotlin在数字处理上接近于java但是不是完全相同。他提供如下几种内置类型来表示数字:Double、Float、Long、Int、Short、Byte(字符类型在Kotlin中不是数字)1.1字面常量    数值常量有三种:十进制(123,Long类型要加L-123L,Float要加F或者f-123.4f),十六进制(0x0f...

随便推点

函数式编程学习之路(六)_aibo110110的博客-程序员秘密

找到点干货:PROFESSIONALFUNCTIONAL PROGRAMMING IN C#看了下目录,正是我想要的,同时也发现,函数式编程果然博大精深,看目录,就有第一次看编程语言或是面向对象的感觉,里面的章节,基本上没有一个概念是熟悉的.先从中文目录起把概念列出来:惰性列表:迭代器闭包表达式树局部套用部分应用惰性求值缓存技术递归调用高...

【人工智能】人工智能革命与机遇_人工智能学家的博客-程序员秘密

来源 | 北大AI公开课编辑 | Vincent、Natalie课程导师:雷鸣,天使投资人,百度创始七剑客之一,酷我音乐创始人,北京大学信科人工智能创新中心主任,2000年获得北京大学计...

北师大计算机组成原理离线作业,北师大网络教育 离线作业 计算机组成原理(一、二、三)..._白条说再来一碗的博客-程序员秘密

《计算机组成原理》作业(一)一、CPU:Central Processing Unit 中央处理单元 执行存放在主存储器中的程序即机器指令.CPU是由控制器和运算器.PC:Personal Computer 个人电脑 能独立运行、完成特定功能的个人计算机 IR:Immediate Rendering 直接渲染CU:本文来自: 疯狂英语([url]http://doc...

jrtplib在ubuntu下的编译安装_jrtlib 在 ubuntu 下编译_码拉僧的博客-程序员秘密

1 源码下载JRTPLIB官网:http://research.edm.uhasselt.be/jori/page/Main/HomePage.html这里我们要下载这两个库,如下图两个库下载,如下图:2 相关工具安装jrtplib使用cmake构建,这里需要安装较新版本的cmake.3 ubuntu下编译安装先编译jthread :解压jthread-1.3.3.tar.gztar xvzf j...

c主线程如何等待子线程结束 linux_linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线..._Mike昊的博客-程序员秘密

1、介绍API1、pthread_create函数函数简介pthread_create是UNIX环境创建线程函数头文件#include函数声明int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);返回值若...

技巧8——linux假死现象要知道_服务器假死的表现_温柔梦9527的博客-程序员秘密

== 1.什么是假死现象?==所谓的假死现象,就是指linux内核alive,但是其上面的某个或者所有操作的响应变得很慢的现象== 2.比较常见的现象有以下几种?==(1)能ping通访问的服务器(2)系统负载非常的高(3)SSH不能登陆或者登陆非常的慢(4)服务器上提供的服务都不能正常响应,比如:不能访问系统上部署的wed服务器所提供的页面(5)在系统上做任何其它操作都没有反应或者...

推荐文章

热门文章

相关标签