sys和os模塊python
http://www.runoob.com/python3/python3-os-file-methods.html緩存
Python中 sys.argv[]的用法簡明解釋學習
由於是看書自學的python,開始後不久就遇到了這個引入的模塊函數,且一直在IDLE上編輯了後運行,試圖從結果發現它的用途,然而結果一直都是沒結果,也在網上查了許多,但發現這個問題的比較詳細的解釋只有一個版本,大部分都是轉裁和複製的。給的都是簡明python教程上那個一長串代碼的例子,說看了就明白了,可我看得暈頭轉向的仍是沒真正明白,只知道「sys.argv[0]表示代碼自己文件路徑」這點,其實仍是不明其意。後來通過大量努力,多方求教才真正明悟了,謹以記錄和分享,但願能從另外一個角度給同在求索過程當中的同窗一點啓發。編碼
sys.argv[]說白了就是一個從程序外部獲取參數的橋樑,這個「外部」很關鍵,因此那些試圖從代碼來講明它做用的解釋一直沒看明白。由於咱們從外部取得的參數能夠是多個,因此得到的是一個列表(list),也就是說sys.argv其實能夠看做是一個列表,因此才能用[]提取其中的元素。其第一個元素是程序自己,隨後才依次是外部給予的參數。spa
下面咱們經過一個極簡單的test.py程序的運行結果來講明它的用法。.net
1 #test.py 2 3 import sys 4 a=sys.argv[0] 5 print(a)
將test.py保存在c盤的根目錄下。設計
在程序中找到 ‘運行’->點擊->輸入"cmd"->回車鍵 進入控制檯命令窗口(以下圖),先輸入cd c:\ (做用是將命令路徑改到c盤根目錄),而後輸入test.py運行咱們剛剛寫的程序:code
獲得的結果是C:\test.py,這就是0指代碼(即此.py程序)自己的意思。
而後咱們將代碼中0改成1 :
a=sys.argv[1]
保存後,再從控制檯窗口運行,此次咱們加上一個參數,輸入:test.py what
獲得的結果就是咱們輸入的參數what,看到這裏你是否是開始明白了呢。
那咱們再把代碼修改一下:
a=sys.argv[2:]
保存後,再從控制檯窗臺運行程序,此次多加幾個參數,以空格隔開:
test.py a b c d e f
獲得的結果爲[‘b’, ’c’, ’d’, ’e’, ’f’]
應該大徹大悟了吧。Sys.argv[ ]其實就是一個列表,裏邊的項爲用戶輸入的參數,關鍵就是要明白這參數是從程序外部輸入的,而非代碼自己的什麼地方,要想看到它的效果就應該將程序保存了,從外部來運行程序並給出參數。
watchdog模塊,對文件建立刪除等操做進行監控
stringIO和bytesIO
上下文管理器https://blog.csdn.net/hbnn111/article/details/78029011
http://python.jobbole.com/82289/
https://www.cnblogs.com/vamei/archive/2012/11/23/2772445.html
hmac和hashlib
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0015108777177966ef0f4f8510a41b3b8c48cdcf7047b2d000
StringIO常常被用來做爲字符串的緩存,應爲StringIO有個好處,他的有些接口和文件操做是一致的,也就是說用一樣的代碼,能夠同時當成文件操做或者StringIO操做。
Python學習筆記之optparse模塊OptionParser
optparse,是一個更夠讓程序設計人員輕鬆設計出簡單明瞭、易於使用、符合標準的Unix命令例程式的Python模塊。生成使用和幫助信息
import StringIO s = StringIO.StringIO() s.write('www.baidu.com\r\n') s.write('news.realsil.com.cn') s.seek(0) print '*' * 20 print s.tell() print s.read() print '*' * 20 print s.tell() print s.read() print '*' * 20 print s.tell() print s.getvalue() print '*' * 20 print s.tell() s.seek(-4,2) print s.read()
運行結果:
********************
0
www.baidu.com
news.realsil.com.cn
********************
34
********************
34
www.baidu.com
news.realsil.com.cn
********************
34
m.cn
----------------------
s.read([n])
參數n限定讀取長度,int類型;缺省狀態爲從當前讀寫位置讀取對象s中存儲的全部數據。讀取結束後,讀寫位置被移動。
----------------------
s.readline([length])
參數length限定讀取的結束位置,int類型,缺省狀態爲None:從當前讀寫位置讀取至下一個以「\n」爲結束符的當前行。讀寫位置被移動。
----------------------
s.readlines([sizehint])
參數sizehint爲int類型,缺省狀態爲讀取全部行並做爲列表返回,除此以外從當前讀寫位置讀取至下一個以「\n」爲結束符的當前行。讀寫位置被移動。
----------------------
s.write(s)
從讀寫位置將參數s寫入給對象s。參數s爲str或unicode類型。讀寫位置被移動。
----------------------
s.writelines(list)
從讀寫位置將list寫入給對象s。參數list爲一個列表,列表的成員爲str或unicode類型。讀寫位置被移動。
----------------------
s.getvalue()
此函數沒有參數,返回對象s中的全部數據。
----------------------
s.truncate([size])
從讀寫位置起切斷數據,參數size限定裁剪長度,缺省值爲None。
----------------------
s.tell()
返回當前讀寫位置。
----------------------
s.seek(pos[,mode])
移動當前讀寫位置至pos處,可選參數mode爲0時將讀寫位置移動至pos處,爲1時將讀寫位置從當前位置起向後移動pos個長度,爲2時將讀寫位置置於末尾處再向後移動pos個長度;默認爲0。
----------------------
s.close()
釋放緩衝區,執行此函數後,數據將被釋放,也不可再進行操做。
----------------------
s.isatty()
此函數老是返回0。不論StringIO對象是否已被close()。
----------------------
s.flush()
刷新內部緩衝區。
----------------------
StringIO操做的只能是str,若是要操做二進制數據,就須要使用BytesIO。
BytesIO實現了在內存中讀寫bytes,咱們建立一個BytesIO,而後寫入一些bytes:
>>> from io import BytesIO >>> f = BytesIO() >>> f.write('中文'.encode('utf-8')) 6 >>> print(f.getvalue()) b'\xe4\xb8\xad\xe6\x96\x87'
請注意,寫入的不是str,而是通過UTF-8編碼的bytes。
和StringIO相似,能夠用一個bytes初始化BytesIO,而後,像讀文件同樣讀取:
>>> from io import BytesIO >>> f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87') >>> f.read() b'\xe4\xb8\xad\xe6\x96\x87'