本文主要介绍xlrd模块读取Excel文档的基本用法,并以一个GDP数据的文档为例来进行操作。

1. 准备工作:

1. 安装xlrd:pip install xlrd

2. 准备数据集:从网上找到的1952~2012年中国国内GDP的数据,数据结构如下:

2. 目标:将这份数据转换成json格式的数据

3. 上代码

#!/usr/bin/python
# coding:utf-8
# 用xlrd读取Excel文件基本用法
import sys
import xlrd
import json # 设置编码格式
reload(sys)
sys.setdefaultencoding('utf-8') # 1. 从Excel文件中读取出Book对象
data = xlrd.open_workbook('./gdp_data.xls')
# print type(data)
# 输出:<class 'xlrd.book.Book'> # 2. 获取sheet页对象
# 2.1 通过sheet索引获取
sheet1 = data.sheet_by_index(0)
# print sheet1
# 输出:<xlrd.sheet.Sheet object at 0x7efc10319ed0> # 2.2 通过sheet名称获取
sheet2 = data.sheet_by_name(u'Sheet1')
# print sheet2
# 输出:<xlrd.sheet.Sheet object at 0x7efbfb72db10> # 3. 获取sheet页的行数和列数
nrows = sheet1.nrows
ncols = sheet1.ncols
# print nrows,ncols
# 输出:62 5
# 说明表格有62行、5列 # 4. 获取第0行的值(是一个列表)
row_data = sheet1.row_values(0)
# print row_data
# 输出:[u'year', u'GDP', u'first industry', u'second industry', u'third industry'] # 5. 获取第0列的值(是一个列表)
col_data = sheet1.col_values(0)
# print col_data
# 输出:[u'year', 1952.0, 1953.0, 1954.0, 1955.0,...] # 6. 使用行列索引(从0开始)获取单元格的数据
cell_A1 = sheet1.cell(0,0)
# print cell_A1
# print type(cell_A1)
# print cell_A1.value
# 输出:
'''
text:u'year'
<class 'xlrd.sheet.Cell'>
year
''' # 7. 应用:将Excel文件中的数据转换成json数组
# 索引(即表头)
idx = sheet1.row_values(0)
# 最终的数据列表
data = []
# 从第1行开始遍历循环所有行,获取每行的数据
for i in range(1,nrows):
row_data = sheet1.row_values(i)
# 组建每一行数据的字典
row_data_dict = {}
# 遍历行数据的每一项,赋值进行数据字典
for j in range(len(row_data)):
item = row_data[j]
row_data_dict[idx[j]] = item
# 将年份字段转成整形
row_data_dict['year'] = int(row_data_dict['year'])
# 将行数据字典加入到data列表中
data.append(row_data_dict) print json.dumps(data,indent = 4)
# 输出:
'''
[
{
"GDP": 679.0,
"second industry": 141.8,
"first industry": 342.9,
"third industry": 194.3,
"year": 1952
},
{
"GDP": 824.0,
"second industry": 192.5,
"first industry": 378.0,
"third industry": 253.5,
"year": 1953
},
{
"GDP": 859.0,
"second industry": 211.7,
"first industry": 392.0,
"third industry": 255.3,
"year": 1954
},
...
]
'''

随机推荐

  1. MFC invalidate和RedrawWindow区别

    Invalidate()函数是强制系统进行重画,但是不一定就马上进行重画.因为Invalidate()只是通知系统,此时的窗口已经变为无效.强制系统调用WM_PAINT,而这个消息只是Post就是将该 ...

  2. Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播

    工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的. Consul使用Go ...

  3. Consul实现原理系列文章1: 用Raft来实现分布式一致性

    工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.在前一篇文章中,我介绍了Raft算法.这篇文章会讲讲Consul是如何使用Raft算法来实现分布式一 ...

  4. 【转】锤子CTO钱晨:福利好是一种堕落的公司文化

    “这是拉勾网对锤子科技CTO钱晨的访谈,作为中国手机界三大产品经理之一,他带领着一众硬件工程师在手机红海中厮杀.钱晨喜欢焦虑的工程师,佩服有方向感的人. 本文作者:西岳 拉勾网原创出品,转载请注明作者 ...

  5. Spring MVC Hibernate验证器

    下面的示例演示如何使用Spring Web MVC框架在表单中使用错误处理和验证器. 首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web ...

  6. 图像增强之DDE---基于红外图像的数字图像细节增强DDE

    (1)DDE应用背景 (2)DDE算法简介 (3)DDE 实现 (4)DDE 总结和不足 ----------author:pkf -----------------time:2-9 -------- ...

  7. java字符编码详解

    引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国 ...

  8. Eigen求矩阵行列式 及 行列式本质

    转置.伴随.行列式.逆矩阵 小矩阵(4 * 4及以下)eigen会自动优化,默认采用LU分解,效率不高 #include <iostream> #include <Eigen/Den ...

  9. MySQL的order by子句

    1.语法:select 字段列表 from 表名 [where 子句][group by 子句][having 子句][order by 子句]; 注解: 1.默认是从第一条记录开始升序, 2.des ...

  10. [Unity基础]移动平台下的文件读写

    From:http://blog.csdn.net/lyh916/article/details/52161633 参考链接: http://www.cnblogs.com/murongxiaopif ...