xlsxwriter安装的保存是什么函数?

打赏支付方式:
您看完此文章的心情是
已有人发表评论
当前热门文章
阅读更多:
阅读更多:
阅读更多:
看过本文的人还看过
一个文化艺术垂直电子商务网站。
一个文化艺术垂直电子商务网站。
一、系统环境:rhel6.5selinuxandiptablesdisabled物理主机:172.25.44.250&..
近期zabbix出现一个漏洞。zabbix的jsrpc的profileIdx2参数存在insert方式的SQ
近期zabbix出现一个漏洞。zabbix的jsrpc的profileIdx2参数存在insert方式的SQ
CopyRight (C)
网站名称 版权所有. All Rights Reserved.备案号:waynetree 的BLOG
用户名:waynetree
访问量:941
注册日期:
阅读量:5863
阅读量:12276
阅读量:336289
阅读量:1040255
51CTO推荐博文
& & 《JavaScript: The Good Parts》,解释了JavaScript编程的精髓。理解本书能够解释我们实际编程中遇到的很多问题,并且有助于写出高质量的代码。这里总结了一下要点,其主要内容涉及到JavaScript特殊的语法,理解Prototype,正确解析this的指代,函数对象的使用,闭包的使用等。&&&&1.&JavaScript 语法和对象的特别之处&&&&& &1) 两种获取对象属性值的方法:[] 或.&&&&&&stooge['first-name']
&&&&&&stooge.nickname&&&&& &用[]可以取到不符合变量命名规范的属性(如'first-name')。当你的JSON对象有个key值是这种名字时,就可以用[]取出它的值。&&&&& &2) 属性可以动态添加;属性可以是函数(函数属性成为“方法”(method)) & &&&&&&&flight.status&=&'overdue';&&&&& &当status是flight的属性时,上面的结果是更新其值;当没有此属性时则添加此属性。&&&&& &3)灵活使用逻辑运算符||和&& &&&&&&&&&&&var&status&&=&flight.status&||&"unknown";
&&&&&&var&model&=&flight.equipment&&&&flight.equipment.model&&&&& &JavaScript的||和&&运算的结果不是逻辑值true或false,而是操作数之一。上面的|| 给status一个默认值"unknown". 上面的&&给model至少一个undefined值而不至于因为flight.equipment没定义而抛出异常。&&&&2. 理解Prototype& & 我发现这本书对Prototype的解释简明扼要,比网上那些长篇大论有效多了。“每一个对象都链接到一个原型对象并从其继承属性”。(这个链接通过每个对象都有的prototype属性来实现)。换言之每个对象都有它的原型对象。所有用object literal(即{...})创建的对象都链接到Object.prototype。这个Prototype可以结合设计模式中的Prototype Pattern去理解。& & &1)要创建一个对象并指定另一个对象作为它的原型对象,较好的方式如下:&&&&if(typeof&Object.create&!==&'function')&{
&&&&&&&&Object.create&=&function(o)&{
&&&&&&&&&&&&var&F&=&function()&{};
&&&&&&&&&&&&F.prototype&=&o;
&&&&&&&&&&&&return&new&F();
&&&&var&another_stooge&=&Object.create(stooge);& & 如上another_stooge将以stooge为原型,继承stooge的属性。& & 在对象建立后,向其原型增加的属性仍然会被该对象继承。获取对象属性值时对属性的查找策略是:沿着继承链向上查找,遇到就停止。当对象有某属性时就取该对象的该属性,没有时则向其原型对象索取。这样不断递归。“原型链条只对索取属性有效”,这句话可以解释下面的很多问题。&&&&&2) 对象的hasOwnProperty方法只在本对象中查找属性,不访问原型链条。因为那个链条只对索取属性(如obj.prop)有效。& & &3) delete的影响 &&&&&obj.prop&&&&&&&&//&对象的prop属性
&&&&delete&obj.prop
&&&&obj.prop&&&&&&&&//&undefiend,或者是obj原型的原型的。。。的prop属性&&&&&delete可以用来从一个对象obj中移除某一个属性prop。移除对原型没有影响。这也可以理解为原型链条只对索取属性有效。相反,如果原型中也有prop属性,则obj.prop将会取到原型中的值。&&&&&&&&3. 少用全局变量!&&&&全局变量应该尽可能少用。可以用一个唯一的全局变量作为容器,容纳所有其他的全局变量。像下面这样:&&&&var&MYAPP&=&{};
&&&&MYAPP.stooge&=&{};
&&&&MYAPP.flight&=&{};&&&&4.函数& &&&&&&“函数是JavaScript最好的东西”。函数也是对象。一个重要的推论就是它们也链接着原型:Function.prototype。另外,每个函数对象func创建的时候也会带一个prototype属性,它的值是一个对象,这个对象带个constructor属性,其值是这个函数func...(又绕回去了...)&&&& 函数对象的建立是通过函数字面值(function literal),即function(va...){}& &&&&&5. 函数的调用模式和this指代&&&&this指代的对象由函数(function)的“调用模式”(invocation pattern)决定。有四种调用模式:& & & 1)方法调用模式(Method Invocation Pattern)&&&&&&&&前面提到方法是作为属性的函数。方法调用即通过对象调用函数:&&&&&&var&myObj&=&{
&&&&&&&&value:&0,
&&&&&&&&increment:&function(inc)&{
&&&&&&&&&&&&this.value&+=&typeof&inc&===&'number'&?&inc&:&1;
&&&&&&myObj.increment();&//&方法调用模式
&&&&&&myObj.value&&&&& &如上,increment为方法,调用之后myObj.value将打出1,因为increment中的this指代myObj。&&&& &2)函数调用模式(Function Invocation Pattern)&&&&& & 这种指的是当函数不是对象属性时对它的调用模式。此时理论上其函数体中的this指代的是隐藏的全局对象。所以这个this没有什么用,而且不推荐用。这同样适用于内部函数。但我们经常需要在方法的内部函数中访问方法所属的对象,这就要用到“that”技巧:&&&&&&myObj.double&=&function()&{
&&&&&&&&&&var&that&=&
&&&&&&&&&&var&helper&=&function()&{
&&&&&&&&&&&&&&that.value&=&add(that.value,&that.value);
&&&&&&&&&&}
&&&&&&&&&&helper();
&&&&&&}&&&&& &如上helper作为double方法的内部函数,只能通过that访问到myObj对象来完成任务。&&&&& 3)构造函数调用模式(Constructor Invocation Pattern)&&&&&&&&首先要好好理解一下构造函数。构造函数一定要与new一起使用,不然后果很严重。为了提醒自己,常常把构造函数名首字母大写。但不管怎样new Constructor()的方式不推荐使用。有更好的替代方法来构造对象。&&&&&&var&Quo&=&function&(string)&{
&&&&&&&&&&this.status&=&&//!!&注意这里用了this,不用new&Quo调用时this将指向全局...
&&&&&&Quo.prototype.get_status&=&function&{
&&&&&&&&&&return&this.
&&&&&&var&myQuo&=&new&Quo('confused');
&&&&&&myQuo.get_status()&&&&& &“当用new前缀来调用一个函数时,将建立一个新的对象,这个对象带有一个隐式的链接指向这个函数的prototype属性"。(我们前面提到每个函数都有一个prototype属性)。这时的this将指向建立的这个对象。不用new而直接调用时this将指向全局,灾难就在这里。从上面最后也可以看到对象myQuo继承了方法get_status,并且其中的this指向的是myQuo.&&&& &4)apply调用模式&&&&&&&&apply调用可以指定this应该绑定的对象。这个也体现了函数是对象的一个结果:函数也有方法。(即apply方法)。&&&&&&var&array&=&[3,4];
&&&&&&var&sum&=&add.apply(null,&array);
&&&&&&var&statusObject&=&{status:&'A-OK'};
&&&&&&var&status&=&Quo.prototype.get_status().apply(statusObject);&&&&& &如上,第二种用法将get_status方法用在statusObject上,虽然statusObject没有这个方法。同时将this指向了statusObject,得到其status属性值。&&&&这次先分享到这里。下次分享关于闭包Closure和Module Pattern等内容。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)3.1 数据报表之Excel操作模块
本文所属图书&>&
Praise 本书赞誉
市面上介绍互动的、面向对象的Python编程语言的书有很多,其强大而又灵活的特性,使其成为很多企图通过工具来实现工作(半)自动化的运营同学的首选。更难得的是,本书作者以其在腾讯游戏运&&
Excel是当今最流行的电子表格处理软件,支持丰富的计算函数及图表,在系统运营方面广泛用于运营数据报表,比如业务质量、资源利用、安全扫描等报表,同时也是应用系统常见的文件导出格式,以便数据使用人员做进一步加工处理。本节主要讲述利用Python操作Excel的模块XlsxWriter(https://xlsxwriter.readthedocs.org),可以操作多个工作表的文字、数字、公式、图表等。XlsxWriter模块具有以下功能:
100%兼容的Excel XLSX文件,支持Excel 2003、Excel 2007等版本;
支持所有Excel单元格数据格式;
单元格合并、批注、自动筛选、丰富多格式字符串等;
支持工作表PNG、JPEG图像,自定义图表;
内存优化模式支持写入大文件。
XlsxWriter模块的安装方法如下:
# pip install XlsxWriter & &#pip安装方法
# easy_install XlsxWriter & &#easy_install安装方法
# curl -O -L /jmcnamara/XlsxWriter/archive/master.tar.gz
# tar zxvf master.tar.gz
# cd XlsxWriter-master/
# sudo python setup.py install
下面通过一个简单的功能演示示例,实现插入文字(中英字符)、数字(求和计算)、图片、单元格格式等,代码如下:
【/home/test/XlsxWriter/simple1.py】
#coding: utf-8
import xlsxwriter
workbook = xlsxwriter.Workbook('demo1.xlsx') & &#创建一个Excel文件
worksheet = workbook.add_worksheet() & &#创建一个工作表对象
worksheet.set_column('A:A', 20) & &#设定第一列(A)宽度为20像素
bold = workbook.add_format({'bold': True}) & &#定义一个加粗的格式对象
worksheet.write('A1', 'Hello') & &#A1单元格写入'Hello'
worksheet.write('A2', 'World', bold) & &#A2单元格写入'World'并引用加粗格式对象bold
worksheet.write('B2', u'中文测试', bold) & &#B2单元格写入中文并引用加粗格式对象bold
worksheet.write(2, 0, 32) & &#用行列表示法写入数字'32'与'35.5'
worksheet.write(3, 0, 35.5) & &#行列表示法的单元格下标以0作为起始值,'3,0'等价于'A3'
worksheet.write(4, 0, '=SUM(A3:A4)') & &#求A3:A4的和,并将结果写入'4,0',即'A5'
worksheet.insert_image('B5', 'img/python-logo.png') & &#在B5单元格插入图片
workbook.close() & &#关闭Excel文件
程序生成的demo1.xlsx文档截图如图3-1所示。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'【Python数据分析】Python3操作Excel(二) 一些有关问题的解决与优化 - Perl/Python当前位置:& &&&【Python数据分析】Python3操作Excel(二) 一些有关【Python数据分析】Python3操作Excel(二) 一些有关问题的解决与优化&&网友分享于:&&浏览:0次【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化& & 继上一篇&对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了的帮助与启发,十分感谢!
& & 上次存在的问题如下:
& & 1.写入不能继续的问题
& & 2.在Python IDLE中明明输出正确的结果,写到excel中就乱码了。
& & 上述两个问题促使我改换excel处理模块,因为据说xlwt只支持到Excel 2003,很有可能会出问题。
& & 虽然&一只尼玛&给了一个Validate函数,可是那是针对去除Windows下文件名中非法字符的函数,跟写入excel乱码没有关系,所以还是考虑更换模块。
更换xlsxwriter模块
& & 这次我改成xlsxwriter这个模块,. 同样可以pip3 install xlsxwriter,自动下载安装,简便易行。一些用法样例:
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})
# Write some simple text.
worksheet.write('A1', 'Hello')
# Text with formatting.
worksheet.write('A2', 'World', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image('B5', 'logo.png')
workbook.close()
果断更换写入excel的代码。效果如下:
果然鼻子是鼻子脸是脸,该是链接就是链接,不管什么字符都能写,毕竟unicode。
所以说,选对模块很重要!选对模块很重要!选对模块很重要!(重说三)
如果要爬的内容不是很公正标准的字符串或数字的话,我是不会用xlwt啦。
这里有4中Python写入excel的模块对比:/entry/56671
我截了一个对比图如下,具体可以看上面那篇文章,非常详细!
这个既然如此顺畅,还可以写入图片,那我们何不试试看呢?
目标:把图片链接那一列的内容换成真正的图片!
其实很简单,因为我们之前已经有了图片的存储路径,把它插入到里面就可以了。
the_img = "I:\\douban\\image\\"+bookName+".jpg"
writelist=[i+j,bookName,nickname,rating,nums,the_img,bookurl,notion,tag]
for k in range(0,9):
if k == 5:
worksheet.insert_image(i+j,k,the_img)
worksheet.write(i+j,k,writelist[k])
出来是这样的效果,显然不美观,那我们应该适当调整一些每行的高度,以及让他们居中试试看:
查阅xlsxwriter文档可知,可以这么设置行列宽度和居中:(当然,这些操作在excel中可以直接做,而且可能会比写代码更快,但是我倒是想更多试试这个模块)
format = workbookx.add_format()
format.set_align('justify')
format.set_align('center')
format.set_align('vjustify')
format.set_align('vcenter')
format.set_text_wrap()
worksheet.set_row(0,12,format)
for i in range(1,251):
worksheet.set_row(i,70)
worksheet.set_column('A:A',3,format)
worksheet.set_column('B:C',17,format)
worksheet.set_column('D:D',4,format)
worksheet.set_column('E:E',7,format)
worksheet.set_column('F:F',10,format)
worksheet.set_column('G:G',19,format)
worksheet.set_column('H:I',40,format)
至此完成了excel的写入,只不过设置格式这块实在繁杂,得不断调试距离,大小,所以在excel里面做会简单些。
最终代码:
# -*- coding:utf-8 -*-
import requests
import xlwt
import xlsxwriter
from bs4 import BeautifulSoup
from datetime import datetime
import codecs
now = datetime.now()
print(now)
def validate(title):
#from nima
rstr = r"[\/\\\:\*\?\"\&\&\|]"
# '/\:*?"&&|-'
new_title = re.sub(rstr, "", title)
return new_title
txtfile = codecs.open("top2501.txt",'w','utf-8')
url = "/top250?"
header = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36",
"Referer": "/"
image_dir = "I:\\douban\\image\\"
def download_img(imageurl,imageName = "xxx.jpg"):
rsp = requests.get(imageurl, stream=True)
image = rsp.content
path = image_dir + imageName +'.jpg'
#print(path)
with open(path,'wb') as file:
file.write(image)
#建立Excel
workbookx = xlsxwriter.Workbook('I:\\douban\\btop250.xlsx')
worksheet = workbookx.add_worksheet()
format = workbookx.add_format()
format.set_align('justify')
format.set_align('center')
format.set_align('vjustify')
format.set_align('vcenter')
format.set_text_wrap()
worksheet.set_row(0,12,format)
for i in range(1,251):
worksheet.set_row(i,70)
worksheet.set_column('A:A',3,format)
worksheet.set_column('B:C',17,format)
worksheet.set_column('D:D',4,format)
worksheet.set_column('E:E',7,format)
worksheet.set_column('F:F',10,format)
worksheet.set_column('G:G',19,format)
worksheet.set_column('H:I',40,format)
item = ['书名','别称','评分','评价人数','封面','图书链接','出版信息','标签']
for i in range(1,9):
worksheet.write(0,i,item[i-1])
s = requests.Session()
s.get(url,headers=header)
for i in range(0,250,25):
geturl = url + "/start=" + str(i)
#要获取的页面地址
print("Now to get " + geturl)
postData = {"start":i}
res = s.post(url,data = postData,headers = header)
soup = BeautifulSoup(res.content.decode(),"html.parser")
#BeautifulSoup解析
table = soup.findAll('table',{"width":"100%"})
#找到所有图书信息的table
sz = len(table)
#sz = 25,每页列出25篇文章
for j in range(1,sz+1):
sp = BeautifulSoup(str(table[j-1]),"html.parser") #解析每本图书的信息
imageurl = sp.img['src']
#找图片链接
bookurl = sp.a['href']
#找图书链接
bookName = sp.div.a['title']
nickname = sp.div.span
if(nickname):
#如果有别名则存储别名否则存&无&
nickname = nickname.string.strip()
nickname = ""
notion = str(sp.find('p',{"class":"pl"}).string)
#抓取出版信息,注意里面的.string还不是真的str类型
rating = str(sp.find('span',{"class":"rating_nums"}).string)
#抓取平分数据
nums = sp.find('span',{"class":"pl"}).string
#抓取评分人数
nums = nums.replace('(','').replace(')','').replace('\n','').strip()
nums = re.findall('(\d+)人评价',nums)[0]
download_img(imageurl,bookName)
book = requests.get(bookurl)
#打开该图书的网页
sp3 = BeautifulSoup(book.content,"html.parser")
taglist = sp3.find_all('a',{"class":"
#找标签信息
for tagurl in taglist:
sp4 = BeautifulSoup(str(tagurl),"html.parser")
#解析每个标签
lis.append(str(sp4.a.string))
tag = ','.join(lis)
the_img = "I:\\douban\\image\\"+bookName+".jpg"
writelist=[i+j,bookName,nickname,rating,nums,the_img,bookurl,notion,tag]
for k in range(0,9):
if k == 5:
worksheet.insert_image(i+j,k,the_img)
worksheet.write(i+j,k,writelist[k])
txtfile.write(str(writelist[k]))
txtfile.write('\t')
txtfile.write(u'\r\n')
end = datetime.now()
print(end)
print("程序耗时: " + str(end-now))
txtfile.close()
workbookx.close()
运行结果如下:
11:40:50.525635
Now to get /top250?/start=0
Now to get /top250?/start=25
Now to get /top250?/start=50
Now to get /top250?/start=75
Now to get /top250?/start=100
Now to get /top250?/start=125
Now to get /top250?/start=150
Now to get /top250?/start=175
Now to get /top250?/start=200
Now to get /top250?/start=225
11:48:14.946184
程序耗时: 0:07:24.420549
顺利爬完250本书。此次爬取行动就正确性来说已告完成!
本次耗时7分24秒,还是显得太慢了。下一步就应该是如何在提高效率上面下功夫了。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有}

我要回帖

更多关于 qtxlsxwriter 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信