良辰美景奈何天
前一篇文章記錄了利用Python查詢火車票的的代碼齐疙,本篇文章記錄一下其中的一些知識(shí)點(diǎn):
1、docopt
2嬉愧、抓取數(shù)據(jù)requests
3贩挣、pprint喉前、prettytable没酣、colorama模塊
4、Python類
1卵迂、docopt模塊
首先介紹一下docopt:
docopt根據(jù)你寫的文檔描述裕便,可以自動(dòng)為你生成解析器,
可以非常容易的為你的python程序創(chuàng)建命令行界面(Command Line Interface见咒,CLI)偿衰。
docopt的安裝和一般的庫(kù)沒有什么區(qū)別 pip install docopt
他的使用方法是這樣的:
由三個(gè)雙引號(hào)括起來(lái)(當(dāng)然是成對(duì)的),作為文檔的標(biāo)識(shí)改览,內(nèi)容包括四部分:
1下翎、腳本的功能解釋
2、usage 是使用方法宝当,第一個(gè)參數(shù)是腳本的名稱视事,在[]內(nèi)的是可選參數(shù),<>是必選的參數(shù)
3庆揩、參數(shù)的說(shuō)明
4俐东、使用舉例
可以看一下之前的代碼:
"""命令行火車票查看器
Usage:
tickets [-dgktz] <from> <to> <date>
Options:
-h, --help 查看幫助
-d 動(dòng)車
-g 高鐵
-k 快速
-t 特快
-z 直達(dá)
Examples:
tickets 上海 安陽(yáng) 2016-10-10
tickets -dg 上海 安陽(yáng) 2016-10-10
"""
接下來(lái)就是代碼中獲取參數(shù)跌穗,使用起來(lái)也是比較簡(jiǎn)單的
arguments = docopt(__doc__)
from_station = stations.get(arguments['<from>'])
to_station = stations.get(arguments['<to>'])
date = arguments['<date>']
2、獲取123306網(wǎng)站數(shù)據(jù)
第二個(gè)是獲取12306的余票信息虏辫,通過(guò)requests的get函數(shù)
先是定義URL地址蚌吸,然后通過(guò)requests.get(url)獲取數(shù)據(jù),
在本次的代碼中砌庄,verify=False羹唠,忽略對(duì)SSL證書的驗(yàn)證,
獲取的數(shù)據(jù)轉(zhuǎn)換為json格式
通過(guò)r.json().keys() 可以查看都有哪些數(shù)據(jù)
dict_keys(['httpstatus', 'data', 'status', 'validateMessagesShowId', 'messages', 'validateMessages'])
3娄昆、pprint肉迫、prettytable、colorama模塊
第三個(gè)是pprint模塊的打印函數(shù)pprint
這個(gè)模塊提供了一些比較好的打印函數(shù)稿黄,如果和json模塊配合使用喊衫,對(duì)于輸出結(jié)構(gòu)化數(shù)據(jù)比較好
下面一段內(nèi)容是從官方文檔拷貝的,對(duì)這個(gè)函數(shù)進(jìn)行了詳細(xì)的說(shuō)明:
pprint.pprint(object, stream=None, indent=1, width=80, depth=None)
Prints the formatted representation of object on stream, followed by a newline. If stream is None, sys.stdout is used. This may be used in the interactive interpreter instead of the print() function for inspecting values (you can even reassign print = pprint.pprint for use within a scope). indent, width and depth will be passed to the PrettyPrinter constructor as formatting parameters.
這部分的第二個(gè)內(nèi)容是prettytable杆怕,這個(gè)模塊不是Python的內(nèi)置模塊族购,需要自己安裝
在上一篇文章中我們看到了prettytable的使用方法:
def pretty_print(self):
pt = PrettyTable()
pt._set_field_names(self.header)
for train in self.trains:
pt.add_row(train)
print(pt)
這里先定義了一個(gè)prettytable的類pt,然后通過(guò)_set_fiel_names設(shè)置了表頭陵珍,之后在循環(huán)里面依次添加行記錄寝杖,然后打印出來(lái)
另外還看到了一種用法,增加了一些設(shè)置參數(shù)
x = PrettyTable(["name", "age", "sex", "money"])
x.align["name"] = "l" # 對(duì)齊方式
x.padding_width = 0 # 每個(gè)字段中的內(nèi)容距離邊界的距離互纯,可以修改這個(gè)參數(shù)看看效果
x.add_row(["Rocky",20, "male", 8000])
x.add_row(["Alex",21, "male", 5000])
x.add_row(["Helen",22, "Female", 3000])
print x
這部分的最后一個(gè)內(nèi)容是colorama瑟幕,這個(gè)模塊是用來(lái)對(duì)輸出內(nèi)容的顏色進(jìn)行控制的
init(autoreset=True)
#通過(guò)使用autoreset參數(shù)可以讓變色效果只對(duì)當(dāng)前輸出起作用,輸出完成后顏色恢復(fù)默認(rèn)設(shè)置
Fore.GREEN + raw_train['from_station_name'] # 輸出綠色字符
4留潦、Python的類知識(shí)
在本次的代碼實(shí)現(xiàn)過(guò)程中只盹,作者定義了一個(gè)類,用來(lái)將獲取的車次信息整理為良好的輸出格式兔院,
對(duì)于Python類的信息在書上殖卑、網(wǎng)上可以查到好多資料,這里就不記錄了坊萝,
剛剛開始的時(shí)候?qū)︻愔械膕elf不是很熟悉孵稽,用起來(lái)感覺很別扭,要勤加練習(xí)
面向?qū)ο蠹夹g(shù)簡(jiǎn)介
類(Class): 用來(lái)描述具有相同的屬性和方法的對(duì)象的集合十偶。
它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法菩鲜。對(duì)象是類的實(shí)例。
類變量:類變量在整個(gè)實(shí)例化的對(duì)象中是公用的惦积。
類變量定義在類中且在函數(shù)體之外接校。類變量通常不作為實(shí)例變量使用。
數(shù)據(jù)成員:類變量或者實(shí)例變量用于處理類及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)荣刑。
方法重寫:如果從父類繼承的方法不能滿足子類的需求馅笙,
可以對(duì)其進(jìn)行改寫伦乔,這個(gè)過(guò)程叫方法的覆蓋(override),也稱為方法的重寫董习。
實(shí)例變量:定義在方法中的變量烈和,只作用于當(dāng)前實(shí)例的類。
繼承:即一個(gè)派生類(derived class)繼承基類(base class)的字段和方法皿淋。
繼承也允許把一個(gè)派生類的對(duì)象作為一個(gè)基類對(duì)象對(duì)待招刹。
例如,有這樣一個(gè)設(shè)計(jì):一個(gè)Dog類型的對(duì)象派生自Animal類窝趣,
這是模擬"是一個(gè)(is-a)"關(guān)系(例圖疯暑,Dog是一個(gè)Animal)。
實(shí)例化:創(chuàng)建一個(gè)類的實(shí)例哑舒,類的具體對(duì)象妇拯。
方法:類中定義的函數(shù)。
對(duì)象:通過(guò)類定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例洗鸵。對(duì)象包括兩個(gè)數(shù)據(jù)成員(類變量和實(shí)例變量)和方法越锈。
參考資料:
http://cn.python-requests.org/zh_CN/latest/user/advanced.html
http://hao.jobbole.com/docopt/
https://docs.python.org/3.2/library/pprint.html
https://github.com/dprince/python-prettytable
http://www.runoob.com/python/python-object.html
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000