【 – 小学作文】
篇一:《python中xlwt和xlrd库使用分析》
python中使用xlrd、xlwt操作excel表格详解
投稿:junjie 字体:[增加 减小] 类型:转载 时间:2015-01-29 我要评论
这篇文章主要介绍了python中使用xlrd、xlwt操作excel表格详解,python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库,需要的朋友可以参考下
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究"(用此一词让我觉得颇有成就感)之后,基本解决了日常所需。主要记录使用过程的常见问题及解决。
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel. python读excel——xlrd
这个过程有几个比较麻烦的问题,比如读取日期、读合并单元格内容。下面先看看基本的操作:
首先读一个excel文件,有两个sheet,测试用第二个sheet,sheet2内容如下:
python 对 excel基本的操作如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # -*- coding: utf-8 -*- import xlrd import xlwt from datetime import date,datetime def read_excel(): # 打开文件
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 workbook = xlrd.open_workbook(r'F:\demo.xlsx') # 获取所有sheet print workbook.sheet_names() # [u'sheet1', u'sheet2'] sheet2_name = workbook.sheet_names()[1] # 根据sheet索引或者名称获取sheet内容 sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始 sheet2 = workbook.sheet_by_name('sheet2') # sheet的名称,行数,列数 print sheet2.name,sheet2.nrows,sheet2.ncols
# 获取整行和整列的值(数组)
rows = sheet2.row_values(3) # 获取第四行内容
cols = sheet2.col_values(2) # 获取第三列内容
print rows
print cols
# 获取单元格内容
print sheet2.cell(1,0).value.encode('utf-8')
print sheet2.cell_value(1,0).encode('utf-8')
print sheet2.row(1)[0].value.encode('utf-8')
# 获取单元格内容的数据类型
print sheet2.cell(1,0).ctype
if __name__ == '__main__':
read_excel()
运行结果如下:
那么问题来了,上面的运行结果中红框框中的字段明明是出生日期,可显示的确实浮点数。好的,来解决第一个问题:
1、python读取excel中单元格内容为日期的方式
python读取excel中单元格的内容返回的有5种类型,即上面例子中的ctype:
?
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error 即date的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式,先判断表格的ctype=3时xldate才能开始操作。现在命令行看下:
?
1
2
3
4
5
6
7
8
9
10 >>> sheet2.cell(2,2).ctype #1990/2/22 >>> sheet2.cell(2,1).ctype #24 >>> sheet2.cell(2,0).ctype #小胖 >>> sheet2.cell(2,4).ctype #空值(这里是合并单元格的原因) >>> sheet2.cell(2,2).value #1990/2/22
33656.0 12
13 >>> xlrd.xldate_as_tuple(sheet2.cell_value(2,2),workbook.datemode) 14
15 (1992, 2, 22, 0, 0, 0)
>>> date_value =
xlrd.xldate_as_tuple(sheet2.cell_value(2,2),workbook.datemode)
>>> date_value
(1992, 2, 22, 0, 0, 0)
>>> date(*date_value[:3])
datetime.date(1992, 2, 22)
>>> date(*date_value[:3]).strftime('%Y/%m/%d')
'1992/02/22'
即可以做下简单处理,判断ctype是否等于3,如果等于3,则用时间格式处理: ?
if (sheet.cell(row,col).ctype == 3): date_value =
xlrd.xldate_as_tuple(sheet.cell_value(rows,3),book.datemode)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
那么问题又来了,上面 sheet2.cell(2,4).ctype 返回的值是0,说明这个单元格的值是空值,明明是合并的单元格内容"好朋友",这个是我觉得这个包功能不完善的地方,如果是合并的单元格那么应该合并的单元格的内容一样,但是它只是合并的第一个单元格的有值,其它的为空。
?
1 >>> sheet2.col_values(4) 2
3 [u'\u5173\u7cfb', u'\u597d\u670b\u53cb', '', u'\u540c\u5b66', '', '', 4
5
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 u'\u4e00\u4e2a\u4eba', ''] >>> for i in range(sheet2.nrows): print sheet2.col_values(4)[i] 关系 好朋友 同学 一个人
>>> sheet2.row_values(7)
[u'\u65e0\u540d', 20.0, u'\u6682\u65e0', '', '']
>>> for i in range(sheet2.ncols):
print sheet2.row_values(7)[i]
无名
20.0
暂无
>>>
2、读取合并单元格的内容
这个是真没技巧,只能获取合并单元格的第一个cell的行列索引,才能读到值,读错了就是空值。
即合并行单元格读取行的第一个索引,合并列单元格读取列的第一个索引,如上述,读取行合并单元格"好朋友"和读取列合并单元格"暂无"只能如下方式:
?
篇二:《Python execl介绍》
13.3 读写 Excel 文件
本节介绍如何使用 xlrd, xlwt 库读写 Excel 文件,使用这些库的好处在于它不需要使用 COM 接口驱
动 Microsoft Excel,也就是说你不需要安装微软的 Office 套件也可以操作 Excel 文件。 xlrd 库的下载地址:
xlwt 库的下载地址:
xlutils 库的下载地址:
英文帮助文档: 试读版 ? Cell :通过 Worksheet.write 或者 Row.write 方法可以直接写某个单元格
下面是一个简单的例子:
? write_xls.py
演示写 Excel 文件
1 # -*- coding: utf-8 -*-
2 import numpy as np
3 from xlwt import *
4
5 book = Workbook()
6 sheet1 = book.add_sheet(u'随机数')
7 head = ["normal", "power", "gamma", "SUM"]
8 N = 100
9 data = np.vstack([
10 np.random.normal(size=N),
11 np.random.power(a=1.0,size=N),
12 np.random.gamma(0.9,size=N)
13 ])
14 # 创建对齐配置
15 al = Alignment()
16 al.horz = Alignment.HORZ_CENTER
17 al.vert = Alignment.VERT_CENTER
18 # 创建边框配置
19 borders = Borders()
20 borders.bottom = Borders.THICK
21 # 创建样式
22 style = XFStyle()
23 style.alignment = al
24 style.borders = borders
25 # 获得第 0 行
26 row0 = sheet1.row(0)
27 # 将标题写入第 0 行,使用所创建的样式
28 for i, text in enumerate(head):
29 row0.write(i, text, style=style)
30 # 写入随机数
31 for i, line in enumerate(data):
32 for j, value in enumerate(line):
33 sheet1.write(j+1, i, value)
34 # 写求和公式,注意公式中的单元格下标从 1 开始计数
35 for i in xrange(N):
36 sheet1.row(i+1).set_cell_formula(
37 3, Formula("sum(A%s:C%s)" % (i+2, i+2)), calc_flags=1)
38
39 # 设置 4 列的宽度
40 for i in xrange(4):
41 sheet1.col(i).width = 4000
42 # 设置第 0 行的高度
296 第 13 章 数据和文件用 Python 做科学计算 babyself1987@gmail.com 试读版 43 sheet1.row(0).height_mismatch = 1
44 sheet1.row(0).height = 1000
45 book.save("tmp.xls")
程序的输出文件如图13.3所示。程序中除了将数组写入 Excel 文件之外,还演示了各种属性的配置:
? 通过 write 方法的 style 关键字指定单元格的样式,样式的创建比较麻烦,但也很直观,通过分
别创建 Aligment、Borders 等对象配置样式的各个属性,然后创建 XFStyle 对象引用各种配置
? 通过创建 Formula 可以将 Excel 的公式写入文档
? 通过设置 Row 和 Column 对象的 width 和 height 等属性设置行和列的宽度和高度 图 13.3 – 用 xlwt 输出的 Excel 文件
xlwt 的 Utils 子库中有些经常会用的辅助函数:
? col_by_name : 将列名转换为列的编号,例如将"C" 转换为 2
? cell_to_rowcol : 将单元格的字符串表达变换为行列编号,它返回一个 4 个元素的元组:(行编
号, 列编号, 行是否为绝对坐标, 列是否为绝对坐标)
? cell_to_rowcol2 : 和 cell_to_rowcol 类似,但是只返回编号信息
? rowcol_to_cell : 和 cell_to_rowcol 相反,将编号变换为字符串表达
? cellrange_to_rowcol_pair : 将字符串表示的范围变换为一个 4 元元组:(起始行号, 起始列号,
结束行号, 结束列号)
? rowcol_pair_to_cellrange : 和 cellrange_to_rowcol_pair 相反
下面是几个例子:
>>> from xlwt import Utils
>>> Utils.cell_to_rowcol("C4")
(3, 2, False, False)
>>> Utils.cell_to_rowcol("C8"){http://pypi.python.org/pypi/xlrd3/}.
(7, 2, False, False)
13.3 读写 Excel 文件 297用 Python 做科学计算 babyself1987@gmail.com 试读版 >>> Utils.cell_to_rowcol2("C8")
(7, 2)
>>> Utils.cell_to_rowcol("$C$8")
(7, 2, True, True)
>>> Utils.rowcol_to_cell(200,100)
'CW201'
>>> Utils.rowcol_to_cell(200,100, row_abs=True, col_abs=True)
'$CW$201'
13.3.2 读 Excel 文件
读 Excel 文 件 需 要 使 用 xlrd 库, 下 面 的 程 序 读 入 上 节 输 出 的 tmp.xls 文 件, 因 此 请 先 运 行
write_xls.py 生成 tmp.xls 之后再运行下面的程序。
xlrd 不能直接读取 xlwd 输出的公式单元格,需要先用 Excel 打开文档并保存之后才能用 xlrd 计算公
式单元格
首先我们从 xlrd 导入打开 WorkBook 的函数 open_workbook,并且用它打开 tmp.xls 文件。 ? read_xls.py
用 xlrd 库读取 Excel 文件
>>> from xlrd import open_workbook
>>> book = open_workbook("tmp.xls")
接下来可以调用 book 的属性和方法获得我们所需要的信息:
>>> book.nsheets # Sheet 数
1
>>> print book.sheet_names()[0] # 第一个 Sheet 的名字
随机数
>>> sheet = book.sheets()[0] # 获得第一个 Sheet
调用 sheet 的 cell, row, col 等方法可以读取 sheet 中指定的单元格、行以及列中的元素。这些方法返
回的是Cell对象,如果我们希望直接获得它们的值,可以调用cell_value, row_values和col_values
等方法:
>>> sheet.cell(0, 0) # 读取 A1 的内容
text:u'normal'{http://pypi.python.org/pypi/xlrd3/}.
>>> sheet.row(0) # 读取第一行的内容
[text:u'normal', text:u'power', text:u'gamma', text:u'SUM']
# 读取第二列的内容,从第二行开始,并对其求和
>>> sum(x.value for x in sheet.col(1, start_rowx=1))
50.080880120307619
>>> sum(sheet.col_values(1, start_rowx=1)) # 同上
50.080880120307619
298 第 13 章 数据和文件>>> sheet.cell(1,3) # 读取公式单元格的值
number:0.41405871399469785
如果我们需要读取某个 Excel 文件,修改其中的某些内容然后再写回 Excel 文件中去,那么可以使用
xlutils 库中的 copy 函数快速完成从 xlrd.Book 的 xlwt.WorkBook 的转换复制工作。下面的程序在
tmp.xls 中添加一些文字,然后写到 output.xls 文件中去:
#coding=utf8
from xlrd import open_workbook
from xlutils.copy import copy
rb = open_workbook('tmp.xls',formatting_info=True)
wb = copy(rb)
ws = wb.get_sheet(0)
ws.write(0, 4, u"我添加了一些内容")
wb.save('output.xls')
import xlrd
fname = "sample.xls"
bk = xlrd.open_workbook(fname)
shxrange = range(bk.nsheets)
try:
sh = bk.sheet_by_name("Sheet1")
except:
print "no sheet in %s named Sheet1" % fname
return None
nrows = sh.nrows
ncols = sh.ncols
print "nrows %d, ncols %d" % (nrows,ncols)
cell_value = sh.cell_value(1,1)
print cell_value
row_list = []
for i in range(1,nrows):
row_data = sh.row_values(i)
row_list.append(row_data)
import xlrd
wb = xlrd.open_workbook('book.xls') # 打开文件
sheetNames = wb.sheet_names() # 查看包含的工作表
# 获得工作表的两种方法
sh = wb.sheet_by_index(0)
sh = wb.sheet_by_name(u'Sheet1')
# 单元格的值
cellA1 = sh.cell(0,0)
cellA1Value = cellA1.value
#可以用cell_values(rowIndex, colIndex)替代上边两步,对行,列的操作类似
cellA1Value = sh.cell_values(0, 0)
# 对工作表行的操作
for rownum in range(sh.nrows):
rowValueList = sh.row_values(rownum)
print rowValueList
# 第一列的值
columnValueList = sh.col_values(0){http://pypi.python.org/pypi/xlrd3/}.
# 虽然有put_cell()但是没有感觉有什么用,xlrd主要是用来读excel,如果想写的话有PyExcelerator,以后用到在志之
'''
在单元格输入一些内容:
row = 0
col = 0
ctype = 1 # 查看下面
value = 'asdf'
xf = 0 # 扩展的格式化 (默认是0)
sh.put_cell(row, col, ctype, value, xf)
sh.cell(0,0) # 文本:u'asdf'
sh.cell(0,0).value # 'asdf'
可选的类型ctype: 0 = empty(空), 1 = string(字符), 2 = number(数字), 3 = date(日期), 4 = boolean(布尔), 5 = error(错误)
'''
篇三:《ArduCAT_开发环境安装说明》
ArduCAT安装说明
1. 产品简介
ArduCAT是Arduino1 Compatible 开发板。本产品力图通过Arduino技术,大大简化EtherCAT从站的开发。ArduCAT开发板包含两路可用于EtherCAT实时以太网的100BASE-TX网口,所以它特别适合基于PC的自动化方案。ArduCAT使用ATMega1280 处理器,兼容Arduino Mega开发板,并具有完全相同的引脚定义。板上采用开关稳压器提供5V 或3.3V的2A直流输出,且发热甚微。除配套的开源Arduino库外,还配有从站应用层代码自动生成工具,用户只需编辑EXCEL表格便生成完整的协议栈,大大简化了通信协议的代码的开发,使用户能够将注意力集中在开发具体的应用上。
2. 软件安装
为了运行自动生成软件协议栈的工具,需要首先安装python及其xlrd模块。其次,需要安装Arduino和FDTI USB串口驱动,以实现代码的编译与下载。在测试中,使用EtherCAT 用户所熟悉的TwinCAT 或EtherCAT Configurator软件即可。下面就分别介绍各软件的安装。
2.1. Python
2.1.1. 下载
从python.org 下载Python 2.7 for Windows. 下载链接为:.
2.1.2. 安装
双击下载的安装文件,并按提示进行操作。
点击“下一步”。 1 Arduino is a registered trademark of Arduino, LLC.
点击“下一步”。
点击“下一步”。
安装完成。
2.2. xlrd 模块的安装
Python的 xlrd模块用于解析包含从站信息的EXCEL文件。
2.2.1. xlrd模块的下载
Xlrd模块可以从以下网址下载。具体的下载链接为: .
2.2.2. xlrd模块的安装
首先将下载的安装包解压。
打开Windows的命令行 “cmd”窗口,并进入已解压的安装包的目录,并键入以下命令:
“C:\Python27\python.exe” setup.py install
具体命令如上图示例,其中的 “D:\Software\xlrd-0.9.3\” 需被替换为解压的xlrd模块安装包目录。同时,如果Python被安装在非默认目录,则还需要将python目录“C:\Python27\python.exe” 替换为实际安装的目录。
上述命令执行完后,xlrd模块即安装完成。
2.3. TwinCAT 安装
“TwinCAT” 软件是自动化业界配合EtherCAT总线广泛使用的软件。如果不想使用“TwinCAT”软件,也可以使用一个更小的软件,即 “EtherCAT configurator”。它可以从 Beckhoff官方网站下载。下载链接为: .
TwinCAT 软件可以从网站的以下位置下载:
按照其提示即可完成软件安装。
2.4. Arduino 安装
从以下网址下载安装文件 参照Getting Started 网页完成软件安装。
2.5. FDTI USB串口驱动
从以下网站/Drivers/VCP.htm下载FDTI USB串口驱动安装包。 安装指南可以参照Documents页面下的Installation Guides。
3. 开源代码下载
ArduCAT 开发板配套有一个Arduino库和一个从站应用层代码自动生成工具。它们既可以通过GIT进行下载,也可以直接从Github网站下载压缩包。代码下载后可以看到以下4个文件和目录(其中后两个是隐藏的)。第一个目录是Arduino库,第二个目录是从站应用层代码自动生成工具。
如果您已经安装了git工具(例如Git for Windows等),那么使用下列链接 ();如果没有git工具,那么也可以直接从GitHub网站下载压缩包 (https://github.com/ethercat-diy/arducat/archive/master.zip) 。
代码下载完成后,打开Arduino软件并在菜单中选择“Sketch/Import Library…/Add Library…”.
在弹出的对话框中,选择已下载的代码目录下的libraries\ArduCAT子目录。这时“ArduCAT”库就出现在第三方库列表中了,如下图所述。
至此,安装已经完成。如果觉得上一步中选择目录有些烦琐,也可以把代码直接下载或解压在Arduino工作目录下 (例如My Documents\Arduino), 这样Arduino就会自动识别它了。
篇四:《Python入门整理1-基础》
Python 基础教程
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python下环境搭建
Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:/retype/zoom/c354a3df6bd97f192379e927?pn=1&x=0&y=0&raww=217&rawh=29&o=jpg_6_0_______&type=pic&aimh=29&md5sum=abc7d680d45918ec0228b245c0e7670b&sign=f672f56eeb&zoom=&png=0-5938&jpg=0-2811″ target=”_blank”>
2. pip使用 a) 查找: i. ii. pip search xlrd
b) 安装 i. pip install xlrd,xlwt
c) 获取已安装的包
i.
pip list
Python 基础语法
中文编码
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了。
行和缩进
学习
Python与其他语言最大的区别就是,
Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
多行语句
Python语句中一般以新行作为为语句的结束符。 但是我们可以使用斜杠(
\
)将一行的语句分为多行显示,如下所示:
语句中包含[], {} 或 () 括号就不需要使用多行连接符。如下实例:
转载请注明:中小学优秀作文大全_作文模板_写作指导_范文大全 » http://pypi.python.org/pypi/xlrd3/