python入门系列(4) -- python常见应用
計算器、字符編碼
計算器
掌握了python的基本語法后,可以使用python shell來代替各平臺帶的計算器了
>>> (50-5*6)/4.0 # 數(shù)學(xué)表達(dá)式 5.0 >>> a=100 >>> hex(a) # 十六進(jìn)制 '0x64' >>> oct(a) # 八進(jìn)制 '0144' >>> import math >>> math.cos(math.pi / 4.0) 0.70710678118654757 >>> math.log(1024, 2) 10.0 >>> math.pow(2,3) 8.0編碼轉(zhuǎn)換
- 查看ascii碼值
文本處理
簡單的解析可以使用正則表達(dá)式來,第3章已經(jīng)舉了個解析objective-c獲取類中屬性的例子。
正則對多重嵌套的處理會有問題,如html中<table>又有一個table,那解析就會亂掉。這時就要用更專門的庫了來解析html了,如BeautifulSoup就比較方便,可以用它做爬蟲什么的。
demo
展示把幾個簡單的java類的定義轉(zhuǎn)換成objective-c的類定義。
測試網(wǎng)絡(luò)發(fā)包
- 使用pcurl構(gòu)造http get、post請求,在第3章中已經(jīng)給了例子
- 使用struct的pack、unpack快速生成、解析網(wǎng)絡(luò)包
其中,類型對照如下:
wxPython編寫gui程序
wxwidgets是一個跨平臺的GUI庫,與qt類似,現(xiàn)在比qt活躍。wxPython是python對應(yīng)的庫。一個簡單的窗口如下
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部署網(wǎng)站
Django是python的web框架。有了它,就可以使用python來寫網(wǎng)頁了。現(xiàn)在很多人已經(jīng)開始用它來部署網(wǎng)站了,如國內(nèi)新浪云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等)的編寫方式相比有啥優(yōu)缺點(diǎn)呢?
優(yōu)點(diǎn)
- 開源跨平臺,文本文件任何平臺都可以打開,編譯工具也可以在任何平臺運(yùn)行
- 能產(chǎn)生多種格式的文檔,甚至可以簡單地轉(zhuǎn)為博客的markdown語法
- 能夠生成html等格式,便于發(fā)布交流,如發(fā)到網(wǎng)上,大家都可以看到了
- 由于是文本,方便版本控制,也可以加注釋,多人編寫、合并文檔更方便
- WYSIWYG的編寫,如果加載圖片多了,會導(dǎo)致越來越卡,而plain text只是include一個文件,編譯后才會加載
- 基于網(wǎng)頁的技術(shù)可以方便地調(diào)整文檔格式,編寫時可以更加注重內(nèi)容
- 插件較多,如特別適合各種代碼的插入、語法高亮等
缺點(diǎn)
- 沒有WYSIWYG直觀,只能編譯后才能生成實際的文檔,才能看到效果
- 國內(nèi)用的人比較少
sphinx-doc的安裝
使用pip安裝sphinx
pip install sphinxsphinx使用
官方文檔: http://sphinx-doc.org/contents.html
中譯文地址: http://zh-sphinx-doc.readthedocs.org/en/latest/contents.html
demo
用sphinx創(chuàng)建一個文檔工程。并加入一些簡單的內(nèi)容
One more thing: 爬蟲
爬蟲可以使用任何語言,如果你只是做一個簡單功能、不考慮效率的爬蟲,用腳本是最快的。有些網(wǎng)站的網(wǎng)頁相當(dāng)簡單,有些甚至直接使用正則表達(dá)式就能全部匹配出想要的結(jié)果。為了讓大家對python腳本更有興趣,這里提供一個腳本,讓大家學(xué)習(xí),它能實現(xiàn)從xxx網(wǎng)站上,批量下載種子,哈哈[種子下載站jandown如果發(fā)生變化,需要修改代碼],
# encoding:utf8 ''' Created on 2015-03-27@author: vincent '''import pycurl, urllib import StringIO import os import re import sys from 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" % urlreturn Nonereturn 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 Nonereturn b.getvalue()g_total=0 def parseJanDown(url):global g_totalif url.find(g_janDownLinkRef)<-1:return Nonecode = 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+=1print "download %s.torrent complete..total %d" % (code, g_total)passdef crawlerOneItemPage(itemPageUrl): # print "crawlerOneItemPage %s" % itemPageUrlhtml=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+icrawlerOneItemPage(url)def ac168_work(pages):g_pages = pagesfor i in range(1,g_pages):pageUrl= g_ac168URL % (g_fid, i) # print pageUrlcrawlerPageItems(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=1else:pages=options.pagesac168_work(pages)if __name__ == '__main__':main()用腳本爬蟲,爬href的鏈接是比較容易的,但是有些跳轉(zhuǎn)鏈接是用js實現(xiàn)的,這些如果要爬的話,需要解釋js,或者效率低點(diǎn)的做法,搞個ui,調(diào)用系統(tǒng)的瀏覽器控件來處理。
興趣練習(xí)
使用python編寫一個自動代碼生成器
把常用的實現(xiàn)某些功能的代碼歸類,tag化,以后如果要用,只要使用關(guān)鍵字進(jìn)行搜索,就能把代碼提取出來。使用sphinx編寫一份教程,并發(fā)布
選一個你比較熟悉的領(lǐng)域,使用sphinx編寫入門教程或筆記。
總結(jié)
以上是生活随笔為你收集整理的python入门系列(4) -- python常见应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-12-19 nn.CrossE
- 下一篇: 走进小作坊(十)----长尾效应