python入门系列(4) -- python常见应用
来源:互联网 发布:万户网络怎样 编辑:程序博客网 时间:2024/06/11 08:40
计算器、字符编码
计算器
掌握了python的基本语法后,可以使用python shell来代替各平台带的计算器了
>>> (50-5*6)/4.0 # 数学表达式5.0>>> a=100>>> hex(a) # 十六进制'0x64'>>> oct(a) # 八进制'0144'>>> import math>>> math.cos(math.pi / 4.0)0.70710678118654757>>> math.log(1024, 2)10.0>>> math.pow(2,3)8.0
编码转换
- 查看ascii码值
>>> ord('a') # 字母转数值97>>> chr(97) # 数值转字母'a'
文本处理
简单的解析可以使用正则表达式来,第3章已经举了个解析objective-c获取类中属性的例子。
正则对多重嵌套的处理会有问题,如html中
<table>
又有一个table
,那解析就会乱掉。这时就要用更专门的库了来解析html了,如BeautifulSoup
就比较方便,可以用它做爬虫什么的。
demo
展示把几个简单的java类的定义转换成objective-c的类定义。
测试网络发包
- 使用pcurl构造http get、post请求,在第3章中已经给了例子
- 使用struct的pack、unpack快速生成、解析网络包
>>> from struct import *>>> pack('hhl', 1, 2, 3)'\x00\x01\x00\x02\x00\x00\x00\x03'>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')(1, 2, 3)>>> calcsize('hhl')8
其中,类型对照如下:
wxPython编写gui程序
wxwidgets是一个跨平台的GUI库,与qt类似,现在比qt活跃。wxPython是python对应的库。一个简单的窗口如下
import wx app = wx.PySimpleApp() frame = wx.Frame( None, -1, '' ) frame.SetToolTip( wx.ToolTip( 'This is a frame' ) ) frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) ) frame.SetPosition( wx.Point( 0, 0 ) ) frame.SetSize( wx.Size( 300, 250 ) ) frame.SetTitle( 'simple2.py' ) frame.Show() app.MainLoop()
Django部署网站
Django是python的web框架。有了它,就可以使用python来写网页了。现在很多人已经开始用它来部署网站了,如国内新浪云SAE,就同时支持php建站和django建站。
有兴趣可以玩下。
sphinx-doc编写文档
sphinx-doc是一种基于python的文档编写工具。python的官方帮助文档就是使用它编写的(本文也是哈)。 sphinx-doc是reStructuredText,即使用带有简单语法的文本文件
来编写文件,然后通过编译,可以生成html,epub,man,pdf等多种格式。
plain text VS. WYSIWYG
使用文本文件编写,再使用工具编译生成文档(tex,docbook,sphinx都可算这个阵营),和所见即所得(微软的word,mac的page等)的编写方式相比有啥优缺点呢?
优点
- 开源跨平台,文本文件任何平台都可以打开,编译工具也可以在任何平台运行
- 能产生多种格式的文档,甚至可以简单地转为博客的markdown语法
- 能够生成html等格式,便于发布交流,如发到网上,大家都可以看到了
- 由于是文本,方便版本控制,也可以加注释,多人编写、合并文档更方便
- WYSIWYG的编写,如果加载图片多了,会导致越来越卡,而plain text只是include一个文件,编译后才会加载
- 基于网页的技术可以方便地调整文档格式,编写时可以更加注重内容
- 插件较多,如特别适合各种代码的插入、语法高亮等
缺点
- 没有WYSIWYG直观,只能编译后才能生成实际的文档,才能看到效果
- 国内用的人比较少
sphinx-doc的安装
使用pip安装sphinx
pip install sphinx
sphinx使用
官方文档: http://sphinx-doc.org/contents.html
中译文地址: http://zh-sphinx-doc.readthedocs.org/en/latest/contents.html
demo
用sphinx创建一个文档工程。并加入一些简单的内容
One more thing: 爬虫
爬虫可以使用任何语言,如果你只是做一个简单功能、不考虑效率的爬虫,用脚本是最快的。有些网站的网页相当简单,有些甚至直接使用正则表达式就能全部匹配出想要的结果。为了让大家对python脚本更有兴趣,这里提供一个脚本,让大家学习,它能实现从xxx网站上,批量下载种子,哈哈[种子下载站jandown如果发生变化,需要修改代码],
# encoding:utf8'''Created on 2015-03-27@author: vincent'''import pycurl, urllibimport StringIOimport osimport reimport sysfrom optparse import OptionParserg_janDownURL=r"""http://www.jandown.com"""g_janDownFetchURL=r"""http://www.jandown.com/fetch.php"""g_janDownLinkRef=r"""http://www.jandown.com/link.php?ref="""g_fid=r"""16""" #版块g_ac168URL=r"""http://ac168.info/bt/thread.php?fid=%s&page=%d"""g_ac168DataURL=r"""http://ac168.info/bt/"""g_pages=1g_downloadDir=r"""c:\mybts"""g_re_item=re.compile(r'''<h3><a\shref="(htm_data.*?)" id.*?target=_blank>(?!<)''', re.S)g_re_jandown=re.compile(r'''<a href="(http://www.jandown.com.*?)"''', re.S)testURL=r"""http://www.jandown.com/link.php?ref=UgyMkq6s"""def getHtmlRead(url): c = pycurl.Curl() c.setopt(pycurl.URL, url) c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)") b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.setopt(pycurl.FOLLOWLOCATION, 1) c.setopt(pycurl.MAXREDIRS, 5) # c.setopt(pycurl.CONNECTTIMEOUT, 60) # c.setopt(pycurl.TIMEOUT, 300) try: c.perform() except Exception as e: print "html read error %s\r\n" % url return None return b.getvalue()def postHtmlRead(referUrl, data): c = pycurl.Curl() c.setopt(pycurl.URL, g_janDownFetchURL) c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)") b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.setopt(pycurl.POSTFIELDS, urllib.urlencode(data)) c.setopt(pycurl.FOLLOWLOCATION, 1) c.setopt(pycurl.REFERER, referUrl) # c.setopt(pycurl.HEADER, 1) # c.setopt(pycurl.CONNECTTIMEOUT, 0) c.setopt(pycurl.MAXREDIRS, 5) # c.setopt(pycurl.COOKIEJAR, "cookie.txt") try: c.perform() except Exception as e: print "html read error\r\n" return None return b.getvalue()g_total=0def parseJanDown(url): global g_total if url.find(g_janDownLinkRef)<-1: return None code = url[len(g_janDownLinkRef)-len(url):] value = {'code':code} bt=postHtmlRead(testURL, value); if bt != None: fd=open(os.path.join(g_downloadDir, code+".torrent"), "w"); fd.write(bt) fd.close() g_total+=1 print "download %s.torrent complete..total %d" % (code, g_total) passdef crawlerOneItemPage(itemPageUrl):# print "crawlerOneItemPage %s" % itemPageUrl html=getHtmlRead(itemPageUrl) if html==None: return None # 只取一个 item=re.search(g_re_jandown, html) if item != None: parseJanDown(item.groups()[0])# testPageUrl = r'''http://ac168.info/bt/thread.php?fid=16'''def crawlerPageItems(pageUrl): html=getHtmlRead(pageUrl) items=re.findall(g_re_item, html) for i in items: url=g_ac168DataURL+i crawlerOneItemPage(url)def ac168_work(pages): g_pages = pages for i in range(1,g_pages): pageUrl= g_ac168URL % (g_fid, i)# print pageUrl crawlerPageItems(pageUrl) passMSG_USAGE = "python getTorrent.py [-n pages]"def main(): optParser = OptionParser(MSG_USAGE) optParser.add_option("-n","--pages",action = "store",type="int",dest = "pages") options, args = optParser.parse_args() pages = 1# if len(sys.argv)>2:# optParser.print_help()# exit() if options.pages == None: pages=1 else: pages=options.pages ac168_work(pages)if __name__ == '__main__': main()
用脚本爬虫,爬href的链接是比较容易的,但是有些跳转链接是用js实现的,这些如果要爬的话,需要解释js,或者效率低点的做法,搞个ui,调用系统的浏览器控件来处理。
兴趣练习
使用python编写一个自动代码生成器
把常用的实现某些功能的代码归类,tag化,以后如果要用,只要使用关键字进行搜索,就能把代码提取出来。使用sphinx编写一份教程,并发布
选一个你比较熟悉的领域,使用sphinx编写入门教程或笔记。
- python入门系列(4) -- python常见应用
- Python入门常见错误
- python入门系列文章
- Python系列之-入门
- Python系列-入门练习
- python pandas 应用系列
- python 入门系列4:while 循环
- python入门系列(2) -- python环境搭建
- python入门好文章系列
- python入门系列(1) -- 引言
- python入门系列1---基础知识
- python入门系列5:字符串
- 常见python面试题 -- 手写代码系列
- python入门系列4―——语句
- Python入门系列——第4篇
- 常见Python应用范围总结概览
- python 异常处理、assert应用、常见异常
- Python入门系列:文件和目录操作
- DllMain函数参数简介
- 新时期,老师该怎么撑伞?
- 使用stringstream对象简化类型转换
- 关于ArrayList的5道面试题
- 九章算法面试题11 递增矩阵
- python入门系列(4) -- python常见应用
- 黑马程序员-------------反射
- JavaScript特效实例007-为弹出的窗口加入关闭按钮
- 关于初次在myeclipse中配置tomcat
- NFS挂载的时候需要开通那几个端口的访问权限。
- 如何解决Greenplum master node与seg node元数据不一致
- Trace命令的实现
- wxWidgets中OpenGL渲染环境的配置,主要解决不能显示物体阴影问题
- hive实例讲解实现in和not in子句