python經常使用模塊

1、zip函數

zip() 函數用於將可迭代的對象做爲參數,將對象中對應的元素打包成一個個元組,而後返回由這些元組組成的對象,這樣作的好處是節約了很多的內存。python

咱們可使用 list() 轉換來輸出列表。git

若是各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操做符,能夠將元組解壓爲列表。github

語法

zip 語法:web

zip([iterable, ...])

參數說明:正則表達式

  • iterabl -- 一個或多個迭代器;

返回值

返回元組列表算法

>>>a = [1,2,3] 
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一個對象
>>> zipped <zip object at 0x103abc288>
>>> list(zipped) # list() 轉換爲列表 [(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素個數與最短的列表一致 [(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 與 zip 相反,zip(*) 可理解爲解壓,返回二維矩陣式
>>> list(a1) [1, 2, 3]
>>> list(a2) [4, 5, 6] >>>

  2、struct打包模塊                                                

 struct模塊中最主要的三個函數式pack()、unpack()、calcsize()。sql

  •  pack(fmt, v1, v2, ...)  ------ 根據所給的fmt描述的格式將值v1,v2,...轉換爲一個字符串。
  •  unpack(fmt, bytes)    ------ 根據所給的fmt描述的格式將bytes反向解析出來,返回一個元組。
  •  calcsize(fmt)             ------ 根據所給的fmt描述的格式返回該結構的大小。
import struct

pack_num = struct.pack('i', 126)
print('pack_string',pack_num,len(pack_num))
unpack_num = struct.unpack('i', pack_num)
print('unpack_string',unpack_num)

# pack_string b'~\x00\x00\x00' 4
# unpack_string (126,)

print("len: ", struct.calcsize('i'))  # len:  4
print("len: ", struct.calcsize('ii'))   # len:  8
print("len: ", struct.calcsize('f'))    # len:  4
print("len: ", struct.calcsize('ff'))     # len:  8
print("len: ", struct.calcsize('s'))      # len:  1
print("len: ", struct.calcsize('ss'))      # len:  2
print("len: ", struct.calcsize('d'))     # len:  8
print("len: ", struct.calcsize('dd'))     # len:  16
print("len: ", struct.calcsize('B'))     # len:  1
print("len: ", struct.calcsize('!BH'))     # len:  3
print("len: ", struct.calcsize('!BQ'))     # len:  9

3、enumerate函數

enumerate()說明
enumerate()是python的內置函數。enumerate在字典上是枚舉、列舉的意思
對於一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它能夠同時得到索引和值
enumerate多用於在for循環中獲得計數
1.for循環
list = ["","","張亞飛"]
i = 0
for a in list:
    print(i,a)
    i += 1

for i,a in enumerate(list):
    print(i,a)
    
for i,a in enumerate(list,1):
    print(i,a)

2.讀取文件

法一:
count = len(open('1.txt', 'rb').readlines())
法二:
count = 0
for index, line in enumerate(open('1.txt','rb')):
    count += 1

4、tqdm模塊(打印進度條)

from tqdm import tqdm
import time
a=0
for i in tqdm(range(1,10)):
#    print(i)
#    print('哈哈')
    a += i
    time.sleep(0.1)
print(a)

5、jieba                                                                           

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
"""
Created on Wed Aug 15 18:41:28 2018

@author: Zhang Yafei
"""
"""
jieba
「結巴」中文分詞:作最好的 Python 中文分詞組件
主要功能
1.分詞
jieba.cut 方法接受三個輸入參數: 須要分詞的字符串;cut_all 參數用來控制是否採用全模式;HMM 參數用來控制是否使用 HMM 模型
jieba.cut_for_search 方法接受兩個參數:須要分詞的字符串;是否使用 HMM 模型。該方法適合用於搜索引擎構建倒排索引的分詞,粒度比較細
待分詞的字符串能夠是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建議直接輸入 GBK 字符串,可能沒法預料地錯誤解碼成 UTF-8
jieba.cut 以及 jieba.cut_for_search 返回的結構都是一個可迭代的 generator,可使用 for 循環來得到分詞後獲得的每個詞語(unicode),或者用
jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定義分詞器,可用於同時使用不一樣詞典。jieba.dt 爲默認分詞器,全部全局分詞相關函數都是該分詞器的映射。
"""
import sys
sys.path.insert(0,'D:/pytho3.6/Lib/site-packages')
import jieba

seg_list = jieba.cut("我來到北京清華大學", cut_all=True)#全模式
print('全模式:',list(seg_list))
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print('精確模式:',list(seg_list))  # 精確模式
seg_list = jieba.cut("他來到了網易杭研大廈")  # 默認是精確模式
print('默認:',list(seg_list)) #(此處,「杭研」並無在詞典中,可是也被Viterbi算法識別出來了)
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造")  # 搜索引擎模式
print('搜索引擎:',list(seg_list))
"""
2.添加自定義詞典
載入詞典
開發者能夠指定本身自定義的詞典,以便包含 jieba 詞庫裏沒有的詞。雖然 jieba 有新詞識別能力,可是自行添加新詞能夠保證更高的正確率
用法: jieba.load_userdict(file_name) # file_name 爲文件類對象或自定義詞典的路徑
詞典格式和 dict.txt 同樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。file_name 若爲路徑或二進制方式打開的文件,則文件必須爲 UTF-8 編碼。
詞頻省略時使用自動計算的能保證分出該詞的詞頻。
"""
jieba.load_userdict("userdict.txt")
import jieba.posseg as pseg

jieba.add_word('石墨烯')
jieba.add_word('凱特琳')
jieba.del_word('自定義詞')

test_sent = (
"李小福是創新辦主任也是雲計算方面的專家; 什麼是八一雙鹿\n"
"例如我輸入一個帶「韓玉賞鑑」的標題,在自定義詞庫中也增長了此詞爲N類\n"
"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又能夠分出來凱特琳了。"
)
words = jieba.cut(test_sent)
print('/'.join(words))

print("="*40)

result = pseg.cut(test_sent)

for w in result:
    print(w.word, "/", w.flag, ", ", end=' ')

print("\n" + "="*40)

terms = jieba.cut('easy_install is great')
print('/'.join(terms))
terms = jieba.cut('python 的正則表達式是好用的')
print('/'.join(terms))

print("="*40)
# test frequency tune
testlist = [
('今每天氣不錯', ('今天', '天氣')),
('若是放到post中將出錯。', ('', '')),
('咱們中出了一個叛徒', ('', '')),
]

for sent, seg in testlist:
    print('/'.join(jieba.cut(sent, HMM=False)))
    word = ''.join(seg)
    print('%s Before: %s, After: %s' % (word, jieba.get_FREQ(word), jieba.suggest_freq(seg, True)))
    print('/'.join(jieba.cut(sent, HMM=False)))
    print("-"*40)
"""
調整詞典
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中動態修改詞典。
使用 suggest_freq(segment, tune=True) 可調節單個詞語的詞頻,使其能(或不能)被分出來。
注意:自動計算的詞頻在使用 HMM 新詞發現功能時可能無效。
"""
print('/'.join(jieba.cut('若是放到post中將出錯。', HMM=False)))
jieba.suggest_freq(('', ''), True)
print('/'.join(jieba.cut('若是放到post中將出錯。', HMM=False)))
print('/'.join(jieba.cut('「臺中」正確應該不會被切開', HMM=False)))
jieba.suggest_freq('臺中', True)
print('/'.join(jieba.cut('「臺中」正確應該不會被切開', HMM=False)))
"""
3.關鍵詞提取
    3.1基於 TF-IDF 算法的關鍵詞抽取
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 爲待提取的文本
topK 爲返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲 20
withWeight 爲是否一併返回關鍵詞權重值,默認值爲 False
allowPOS 僅包括指定詞性的詞,默認值爲空,即不篩選
jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 實例,idf_path 爲 IDF 頻率文件
代碼示例 (關鍵詞提取)
https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py
"""
"""
關鍵詞提取所使用逆向文件頻率(IDF)文本語料庫能夠切換成自定義語料庫的路徑
用法: jieba.analyse.set_idf_path(file_name) # file_name爲自定義語料庫的路徑
自定義語料庫示例:https://github.com/fxsjy/jieba/blob/master/extra_dict/idf.txt.big
用法示例:https://github.com/fxsjy/jieba/blob/master/test/extract_tags_idfpath.py
"""
"""
關鍵詞提取所使用中止詞(Stop Words)文本語料庫能夠切換成自定義語料庫的路徑
用法: jieba.analyse.set_stop_words(file_name) # file_name爲自定義語料庫的路徑
自定義語料庫示例:https://github.com/fxsjy/jieba/blob/master/extra_dict/stop_words.txt
用法示例:https://github.com/fxsjy/jieba/blob/master/test/extract_tags_stop_words.py
"""
"""
關鍵詞一併返回關鍵詞權重值示例
用法示例:https://github.com/fxsjy/jieba/blob/master/test/extract_tags_with_weight.py
"""
"""
    3.2 基於 TextRank 算法的關鍵詞抽取
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默認過濾詞性。
jieba.analyse.TextRank() 新建自定義 TextRank 實例
算法論文: TextRank: Bringing Order into Texts

基本思想:
將待抽取關鍵詞的文本進行分詞
以固定窗口大小(默認爲5,經過span屬性調整),詞之間的共現關係,構建圖
計算圖中節點的PageRank,注意是無向帶權圖
"""
"""
詞性標註
jieba.posseg.POSTokenizer(tokenizer=None) 新建自定義分詞器,tokenizer 參數可指定內部使用的 jieba.Tokenizer 分詞器。jieba.posseg.dt 爲默認詞性標註分詞器。
標註句子分詞後每一個詞的詞性,採用和 ictclas 兼容的標記法。
"""
用法示例
import jieba.posseg as pseg
words = pseg.cut("我愛北京天安門")
for word, flag in words:
    print('%s %s' % (word, flag))
原理:將目標文本按行分隔後,把各行文本分配到多個 Python 進程並行分詞,而後歸併結果,從而得到分詞速度的可觀提高
"""
5.並行分詞
基於 python 自帶的 multiprocessing 模塊,目前暫不支持 Windows
用法:
jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數
jieba.disable_parallel() # 關閉並行分詞模式
例子:https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py
實驗結果:在 4 核 3.4GHz Linux 機器上,對金庸全集進行精確分詞,得到了 1MB/s 的速度,是單進程版的 3.3 倍。
注意:並行分詞僅支持默認分詞器 jieba.dt 和 jieba.posseg.dt。
"""
6.Tokenize:返回詞語在原文的起止位置
注意,輸入參數只接受 unicode
默認模式
result = jieba.tokenize(u'永和服裝飾品有限公司')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
word 永和                start: 0                end:2
word 服裝                start: 2                end:4
word 飾品                start: 4                end:6
word 有限公司            start: 6                end:10

搜索模式
result = jieba.tokenize(u'永和服裝飾品有限公司', mode='search')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
word 永和                start: 0                end:2
word 服裝                start: 2                end:4
word 飾品                start: 4                end:6
word 有限                start: 6                end:8
word 公司                start: 8                end:10
word 有限公司            start: 6                end:10
7.ChineseAnalyzer for Whoosh 搜索引擎
引用: from jieba.analyse import ChineseAnalyzer
用法示例:https://github.com/fxsjy/jieba/blob/master/test/test_whoosh.py
8.命令行分詞
使用示例:python -m jieba news.txt > cut_result.txt

命令行選項(翻譯):

使用: python -m jieba [options] filename

結巴命令行界面。

固定參數:
  filename              輸入文件

可選參數:
  -h, --help            顯示此幫助信息並退出
  -d [DELIM], --delimiter [DELIM]
                        使用 DELIM 分隔詞語,而不是用默認的' / '。
                        若不指定 DELIM,則使用一個空格分隔。
  -p [DELIM], --pos [DELIM]
                        啓用詞性標註;若是指定 DELIM,詞語和詞性之間
                        用它分隔,不然用 _ 分隔
  -D DICT, --dict DICT  使用 DICT 代替默認詞典
  -u USER_DICT, --user-dict USER_DICT
                        使用 USER_DICT 做爲附加詞典,與默認詞典或自定義詞典配合使用
  -a, --cut-all         全模式分詞(不支持詞性標註)
  -n, --no-hmm          不使用隱含馬爾可夫模型
  -q, --quiet           不輸出載入信息到 STDERR
  -V, --version         顯示版本信息並退出

若是沒有指定文件名,則使用標準輸入。
--help 選項輸出:

$> python -m jieba --help
Jieba command line interface.

positional arguments:
  filename              input file

optional arguments:
  -h, --help            show this help message and exit
  -d [DELIM], --delimiter [DELIM]
                        use DELIM instead of ' / ' for word delimiter; or a
                        space if it is used without DELIM
  -p [DELIM], --pos [DELIM]
                        enable POS tagging; if DELIM is specified, use DELIM
                        instead of '_' for POS delimiter
  -D DICT, --dict DICT  use DICT as dictionary
  -u USER_DICT, --user-dict USER_DICT
                        use USER_DICT together with the default dictionary or
                        DICT (if specified)
  -a, --cut-all         full pattern cutting (ignored with POS tagging)
  -n, --no-hmm          don't use the Hidden Markov Model
  -q, --quiet           don't print loading messages to stderr
  -V, --version         show program's version number and exit

If no filename specified, use STDIN instead.
延遲加載機制
jieba 採用延遲加載,import jieba 和 jieba.Tokenizer() 不會當即觸發詞典的加載,一旦有必要纔開始加載詞典構建前綴字典。若是你想手工初始 jieba,也能夠手動初始化。

import jieba
jieba.initialize()  # 手動初始化(可選)
在 0.28 以前的版本是不能指定主詞典的路徑的,有了延遲加載機制後,你能夠改變主詞典的路徑:

jieba.set_dictionary('data/dict.txt.big')
jieba

  詳情請見githup地址 結巴中文分詞shell

6、you-get                                                                     

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 13 19:32:18 2018

@author: Zhang Yafei
"""
https://github.com/soimort/you-get
入門
下載視頻
當您得到感興趣的視頻時,您可能但願使用--info/ -i選項查看全部可用的質量和格式:

$ you-get -i 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
$ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
$ you-get --itag=18 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
$ you-get https://stallman.org/rms.jpg
$ you-get http://kopasas.tumblr.com/post/69361932517
$ you-get "Richard Stallman eats"
暫停並恢復下載
您可使用Ctrl+ C來中斷下載。
臨時.download文件保存在輸出目錄中。下次you-get使用相同的參數運行時,下載進度將從上一個會話恢復。若是文件被徹底下載(臨時.download擴展已經消失),you-get將跳過下載。
要強制從新下載,請使用--force/ -f選項。(警告:這樣作會覆蓋任何具備相同名稱的現有文件或臨時文件!)
設置下載文件的路徑和名稱
$ you-get -o ~/Videos -O zoo.webm 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
提示:
若是您遇到默認視頻節目的問題,這些選項頗有用,這些視頻節目可能包含與您當前的shell /操做系統/文件系統不兼容的特殊字符。
若是您編寫腳本以批量下載文件並將其放入具備指定名稱的指定文件夾中,這些選項也頗有用。
代理設置
$ you-get -x 127.0.0.1:8087 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
可是,http_proxy默認狀況下應用系統代理設置(即環境變量)。要禁用任何代理,請使用該--no-proxy選項。
提示:
若是你須要使用代理了不少(若是您的網絡阻止某些網站),你可能但願使用you-get與proxychains和設置alias you-get="proxychains -q you-get"(Bash中)。
對於某些網站(例如優酷網),若是您須要訪問僅在中國大陸可用的視頻,能夠選擇使用特定代理從網站提取視頻信息:--extractor-proxy/ -y。
觀看視頻
使用--player/ -p選項將視頻輸入您選擇的媒體播放器,例如mplayer或vlc,而不是下載它:
$ you-get -p vlc 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
或者,若是您但願在瀏覽器中觀看視頻,則無需廣告或評論部分:
$ you-get -p chromium 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
提示:
可使用該-p選項來啓動另外一個下載管理器,例如you-get -p uget-gtk 'https://www.youtube.com/watch?v=jNQXAC9IVRw',儘管它們可能不能很好地一塊兒播放。
加載cookie
並不是全部視頻均可供全部人公開使用。若是您須要登陸您的賬戶以訪問某些內容(例如,私人視頻),則沒法you-get經過--cookies/ -c選項提供瀏覽器Cookie 。

注意:

截至目前,咱們支持兩種格式的瀏覽器cookie:Mozilla cookies.sqlite和Netscape cookies.txt。
重用提取的數據
使用--url/ -u獲取從頁面中提取的可下載資源URL列表。使用--json獲得提取的數據的抽象JSON格式。

警告:

從目前來看,這一功能已不被穩定和JSON模式可能會在將來的重大更改。
支持的網站
現場    網址    影片?    圖片?    特刊?
YouTube的    https://www.youtube.com/    ✓        
推特    https://twitter.com/    ✓    ✓    
VK    http://vk.com/    ✓    ✓    
藤蔓    https://vine.co/    ✓        
Vimeo的    https://vimeo.com/    ✓        
Vidto    http://vidto.me/    ✓        
Videomega    http://videomega.tv/    ✓        
優酷    http://www.veoh.com/    ✓        
tumblr    https://www.tumblr.com/    ✓    ✓    ✓
TED    http://www.ted.com/    ✓        
的SoundCloud    https://soundcloud.com/            ✓
展廳    https://www.showroom-live.com/    ✓        
Pinterest的    https://www.pinterest.com/        ✓    
MusicPlayOn    http://en.musicplayon.com/    ✓        
MTV81    http://www.mtv81.com/    ✓        
Mixcloud    https://www.mixcloud.com/            ✓
優酷    http://www.metacafe.com/    ✓        
Magisto    http://www.magisto.com/    ✓        
可汗學院    https://www.khanacademy.org/    ✓        
互聯網檔案    https://archive.org/    ✓        
Instagram的    https://instagram.com/    ✓    ✓    
InfoQ中文站    http://www.infoq.com/presentations/    ✓        
Imgur    http://imgur.com/        ✓    
重音樂檔案    http://www.heavy-music.ru/            ✓
Google+的    https://plus.google.com/    ✓    ✓    
Freesound上    http://www.freesound.org/            ✓
Flickr的    https://www.flickr.com/    ✓    ✓    
FC2視頻    http://video.fc2.com/    ✓        
Facebook的    https://www.facebook.com/    ✓        
eHow    http://www.ehow.com/    ✓        
位DailyMotion    http://www.dailymotion.com/    ✓        
Coub    http://coub.com/    ✓        
CBS    http://www.cbs.com/    ✓        
樂隊夏令營    http://bandcamp.com/            ✓
AliveThai    http://alive.in.th/    ✓        
interest.me    http://ch.interest.me/tvn    ✓        
755 
ナナゴーゴー    http://7gogo.jp/    ✓    ✓    
NICONICO 
ニコニコ動畫    http://www.nicovideo.jp/163 
網易視頻
網易雲音樂    http://v.163.com/ 
http://music.163.com/    ✓        ✓
56網    http://www.56.com/    ✓        
ACFUN    http://www.acfun.tv/    ✓        
百度
百度貼吧    http://tieba.baidu.com/    ✓    ✓    
爆米花網    http://www.baomihua.com/    ✓        
bilibili 
嗶哩嗶哩    http://www.bilibili.com/    ✓        
Dilidili    http://www.dilidili.com/    ✓        
豆瓣    http://www.douban.com/    ✓        ✓
鬥魚    http://www.douyutv.com/    ✓        
熊貓
熊貓    http://www.panda.tv/    ✓        
鳳凰視頻    http://v.ifeng.com/    ✓        
風行網    http://www.fun.tv/    ✓        
愛奇藝
愛奇藝    http://www.iqiyi.com/    ✓        
激動網    http://www.joy.cn/    ✓        
酷6網    http://www.ku6.com/    ✓        
酷狗音樂    http://www.kugou.com/            ✓
酷我音樂    http://www.kuwo.cn/            ✓
樂視網    http://www.le.com/    ✓        
荔枝FM    http://www.lizhi.fm/            ✓
秒拍    http://www.miaopai.com/    ✓        
MioMio彈幕網    http://www.miomio.tv/    ✓        
痞客邦    https://www.pixnet.net/    ✓        
PPTV聚力    http://www.pptv.com/    ✓        
齊魯網    http://v.iqilu.com/    ✓        
QQ 
騰訊視頻    http://v.qq.com/    ✓        
企鵝直播    http://live.qq.com/    ✓        
新浪
新浪視頻
微博秒拍視頻    http://video.sina.com.cn/ 
http://video.weibo.com/    ✓        
搜狐
搜狐視頻    http://tv.sohu.com/    ✓        
土豆網
土豆    http://www.tudou.com/    ✓        
蝦米    http://www.xiami.com/    ✓        ✓
陽光衛視    http://www.isuntv.com/    ✓        
音悅臺    http://www.yinyuetai.com/    ✓        
優酷網
優酷    http://www.youku.com/    ✓        
戰旗電視    http://www.zhanqi.tv/lives    ✓        
央視網    http://www.cntv.cn/    ✓        
花瓣    http://huaban.com/        ✓    
Naver 
네이버    http://tvcast.naver.com/    ✓        
芒果TV    http://www.mgtv.com/    ✓        
火貓電視    http://www.huomao.com/    ✓        
全民直播    http://www.quanmin.tv/    ✓        
陽光寬頻網    http://www.365yg.com/    ✓        
西瓜視頻    https://www.ixigua.com/    ✓        
快手    https://www.kuaishou.com/    ✓    ✓    
抖音    https://www.douyin.com/    ✓        
中國體育(TV)    http://v.zhibo.tv/ 
http://video.zhibo.tv/    ✓        
對於不在列表中的全部其餘站點,通用提取器將負責從頁面中查找和下載有趣的資源。
you-get視頻下載

  詳情請見githup地址 you-getjson

7、wget網絡文件下載神器                                             

# -*- coding: utf-8 -*-

"""
@Datetime: 2018/12/13
@Author: Zhang Yafei
"""
import wget

DATA_URL = 'https://img.3ajiepai.com/data/attachment/forum/201812/04/102501eopses2zvpskpab1.jpg'

out_fname = 'jiepai.jpg'

wget.download(DATA_URL, out=out_fname)

 8、optparse

       optparse,是一個更夠讓程序設計人員輕鬆設計出簡單明瞭、易於使用、符合標準的Unix命令例程式的Python模塊。生成使用和幫助信息vim

       首先你必須導入該類,並建立一個OptionParser對象,而後再使用parser.add_option(...)待定義命令行參數,及其幫助文檔。

        每一個命令行參數就是由參數名字符串和參數屬性組成的。如 -f 或者 file 分別是長短參數名:

# -*- coding: utf-8 -*-

"""
@Datetime: 2018/12/17
@Author: Zhang Yafei
"""
from optparse import OptionParser

optParser = OptionParser()
optParser.add_option('-i', '--infile', action='store', type="string", dest='filename')
optParser.add_option("-o", "--outfile", action="store", dest="outfile",
                     default='', help="make lots of noise [default]")
# optParser.parse_args() 剖析並返回一個字典和列表,
# 字典中的關鍵字是咱們全部的add_option()函數中的dest參數值,
# 而對應的value值,是add_option()函數中的default的參數或者是
# 由用戶傳入optParser.parse_args()的參數
fakeArgs = ['-i', 'file.txt', '-o', 'how.csv', 'arg1', 'arg2']
option, args = optParser.parse_args()
op, ar = optParser.parse_args(fakeArgs)
print("option : ", option)
print("args : ", args)
print("op : ", op)
print("ar : ", ar)
E:\python\my_package>python _optparse.py -i file1 -o file2 arg1 arg2
option :  {'filename': 'file1', 'outfile': 'file2'}
args :  ['arg1', 'arg2']
op :  {'filename': 'file.txt', 'outfile': 'how.csv'}
ar :  ['arg1', 'arg2'] 
add_option()參數說明:
        action:存儲方式,分爲三種store、store_false、store_true
        type:類型
        dest:存儲的變量
        default:默認值
        help:幫助信息
    # The set of actions that involve storing a value somewhere;
    # also listed just for constructor argument validation.  (If
    # the action is one of these, there must be a destination.)
    STORE_ACTIONS = ("store",
                     "store_const",
                     "store_true",
                     "store_false",
                     "append",
                     "append_const",
                     "count")
action 

 action的取值有那麼多,我着重說三個store、store_false、store_true 三個取值。 action默認取值store。
       --store 上表示命令行參數的值保存在options對象中。例如上面一段代碼,若是咱們對optParser.parse_args()函數傳入的參數列表中帶有‘-f’,那麼就會將列表中‘-f’的下一個元素做爲其dest的實參filename的值,他們兩個參數造成一個字典中的一個元素{filename:file_txt}。相反當咱們的參數列表中沒有‘-f’這個元素時,那麼filename的值就會爲空。

      --store_false fakeArgs 中存在'-v'verbose將會返回False,而不是‘how are you’,也就是說verbose的值與'-v'的後一位無關,只與‘-v’存在不存在有關。

      --store_ture  這與action="store_false"相似,只有其中有參數'-v'存在,則verbose的值爲True,若是'-v'不存在,那麼verbose的值爲None。

optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")

optParser.add_option("-v","--vison", action="store", dest="verbose",default='gggggg',

                     help="make lots of noise [default]")
help

主要用於顯示幫助信息,使用optParser.print_help()將幫助欄顯示出來。

相關文章
相關標籤/搜索