python常用模組part1

來源:互聯網
上載者:User

標籤:建模   關聯   imp   序列化   服務   配置   pair   自己的   which   

1. sys模組

sys模組包括了一組非常實用的服務,內含很多函數方法和變數,用來處理Python運行時配置以及資源,從而可以與前當程式之外的系統內容互動 
1.1 sys.argv 在外部向程式傳遞參數

sys.argv[number]
  • 1
  • 2

一般情況下,number為0是這個指令碼的名字,1,2…則為命令列下傳遞的參數

樣本(在D:\github\pycharmDevelopment有一個名字為classoop.py的python檔案)

import sysdef testSys():    print(sys.argv[0])    print(‘The first arg is: ‘, sys.argv[1])    print(‘The second arg is: ‘, sys.argv[2])testSys()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
D:\github\pycharmDevelopment>python classoop.py halo hiFile name is:  classoop.pyThe first arg is:  haloThe second arg is:  hi
  • 1
  • 2
  • 3
  • 4
  • 5

1.2 sys.platform平台查看

>>> sys.platform‘win32‘
  • 1
  • 2
  • 3

1.3 sys.path 查看python路徑

我們在執行import module_name的時候,python內部發生了什麼呢?簡單的說,就是搜尋module_name。根據sys.path的路徑來搜尋module.name

>>> sys.path[‘‘, ‘E:\\python35\\python35.zip‘, ‘E:\\python35\\DLLs‘, ‘E:\\python35\\lib‘, ‘E:\\python35‘, ‘E:\\python35\\lib\\site-packages‘, ‘E:\\python35\\lib\\site-packages\\setuptools-27.3.0-py3.5.egg‘]
  • 1
  • 2
  • 3
  • 4
  • 5

大家以後寫好的模組就可以放到上面的某一個目錄下,便可以正確搜尋到了。當然大家也可以添加自己的模組路徑。Sys.path.append(“mine module path”).

1.4 sys.stdin,sys.stdout,sys.stderr

stdin , stdout , 以及stderr 變數包含與標準I/O 流對應的流對象. 如果需要更好地控制輸出,而print 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時候你就可以重新導向輸出和輸入到其它裝置( device ), 或者以非標準的方式處理它們

1.5 sys.builtin_module_names

sys.builtin_module_names返回一個列表,包含內建模組的名字

1.6 sys.exit(n)

調用sys.exit(n)可以中途退出程式,當參數非0時,會引發一個SystemExit異常,從而可以在主程式中捕獲該異常。

1.7 sys.version字串給你提供安裝的Python的版本資訊。sys.version_info元組則提供一個更簡單的方法來使你的程式具備Python版本要求功能。

>>> sys.version‘3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]‘>>> sys.version_infosys.version_info(major=3, minor=5, micro=2, releaselevel=‘final‘, serial=0)>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.8 sys.getdefaultencoding(): 擷取系統當前編碼,一般預設為ascii。 
sys.setdefaultencoding(): 設定系統預設編碼,執行dir(sys)時不會看到這個方法,在解譯器中執行不通過,可以先執行reload(sys),在執行 setdefaultencoding(‘utf8’),此時將系統預設編碼設定為utf8。(見設定系統預設編碼 ) 
sys.getfilesystemencoding(): 擷取檔案系統使用編碼方式,Windows下返回’mbcs’,mac下返回’utf-8’.

>>> sys.getdefaultencoding()‘utf-8‘>>> sys.getfilesystemencoding()‘mbcs‘
  • 1
  • 2
  • 3
  • 4
  • 5
2. json 模組

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。易於人閱讀和編寫。同時也易於機器解析和產生。

資料格式可以簡單地理解為索引值對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),雜湊表(hash table),有鍵列表(keyed list),或者關聯陣列 (associative array)。 
值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。

2.1 json.dumps()

dump的功能就是把Python對象encode為json對象,一個編碼過程。注意json模組提供了json.dumps和json.dump方法,區別是dump直接到檔案,而dumps到一個字串,這裡的s可以理解為string。

>>>data = [ { ‘a‘:‘A‘, ‘b‘:(2, 4), ‘c‘:3 } ]>>>print(‘data:‘, repr(data))>>>data: [{‘c‘: 3, ‘b‘: (2, 4), ‘a‘: ‘A‘}]>>>data_string = json.dumps(data)>>>print(‘json:‘, data_string)json: [{"c": 3, "b": [2, 4], "a": "A"}]>>>type(data)<class ‘list‘>>>>type(data_string)<class ‘str‘>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.2 json.dump()

不僅可以把Python對象編碼為string,還可以寫入檔案。因為我們不能把Python對象直接寫入檔案,這樣會報錯TypeError: expected a string or other character buffer object,我們需要將其序列化之後才可以。

with open(‘json-dump.json‘,‘w‘) as fp:    json.dump(data,fp)
  • 1
  • 2

2.3 json.loads()

從Python內建對象dump為json對象我們知道如何操作了,那如何從json對象decode解碼為Python可以識別的對象呢?是的用json.loads方法,當然這個是基於string的,如果是檔案,我們可以用json.load方法。

decoded_json = json.loads(data_string)
  • 1
  • 2

2.4 json.load()

可以直接load檔案。

with open(‘output.json‘) as fp:    print type(fp)    loaded_json = json.load(fp)
  • 1
  • 2
  • 3
3 pickle模組(和json模組作對比)

可能用到的方法有以下:

‘bytes_types‘, ‘codecs‘, ‘compatible_formats‘, ‘decode_long‘, ‘dispatch_table‘, ‘dump‘, ‘dumps‘, ‘encode_long‘, ‘format_version‘, ‘io‘, ‘islice‘, ‘load‘, ‘loads‘, ‘maxsize‘, ‘pack‘, ‘re‘, ‘sys‘, ‘unpack‘, ‘whichmodule‘
  • 1
  • 2

3.1 dumps(object) 返回一個字串,它包含一個 pickle 格式的對象; loads(string) 返回包含在 pickle 字串中的對象; dump(object, file) 將對象寫到檔案,這個檔案可以是實際的物理檔案,但也可以是任何類似於檔案的對象,這個對象具有 write() 方法,可以接受單個的字串參數; load(file) 返回包含在 pickle 檔案中的對象。

預設情況下, dumps() 和 dump() 使用可列印的 ASCII 表示來建立 pickle。兩者都有一個 final 參數(可選),如果為 True ,則該參數指定用更快以及更小的二進位表示來建立 pickle。 loads() 和 load() 函數自動檢測 pickle 是二進位格式還是文字格式設定。

>>>data_string = pickle.dumps(data)>>>type(data_string)>>><class ‘bytes‘>>>>data = pickle.loads(data_string)>>>type(data)>>><class ‘list‘>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用二進位 pickle 格式不會在節省空間的上顯示出太大的效率。然而,在實際使用複雜物件的系統中,您會看到,使用二進位格式可以在大小和速度方面帶來顯著的改進。

3.2 dump() 和 load()

使用檔案和類似檔案的對象。這些函數的操作非常類似於我們剛才所看到的 dumps() 和 loads() ,區別在於它們還有另一種能力 — dump() 函數能一個接著一個地將幾個對象轉儲到同一個檔案。隨後調用 load() 來以同樣的順序檢索這些對象。

>>>fo = open(‘halo.txt‘,‘wb‘)>>>pickle.dump(data,fo,True)>>>fo.close()>>>fo1 = open(‘halo.txt‘,‘rb‘)>>>load = pickle.load(fo1)>>>load[{‘c‘: 3, ‘b‘: (2, 4), ‘a‘: ‘A‘}]>>>type(fo1)<class ‘_io.BufferedReader‘>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3 檢索所支援的格式

>>>pickle.format_version‘4.0‘>>>pickle.compatible_formats[‘1.0‘, ‘1.1‘, ‘1.2‘, ‘1.3‘, ‘2.0‘, ‘3.0‘, ‘4.0‘]
  • 1
  • 2
  • 3
  • 4
  • 5

pickle的準系統如上,但是其還有很多高階用法如對象引用的維護,循環參考和遞迴引用等。

4. shutil

進階的 檔案、檔案夾、壓縮包 處理模組 
shutil被定義為Python中的一個進階的檔案操作模組,擁有比os模組中更強大的函數,可能用到的方法有以下:

‘chown‘, ‘collections‘, ‘copy‘, ‘copy2‘, ‘copyfile‘, ‘copyfileobj‘, ‘copymode‘, ‘copystat‘, ‘copytree‘, ‘disk_usage‘, ‘errno‘, ‘fnmatch‘, ‘get_archive_formats‘, ‘get_terminal_size‘, ‘get_unpack_formats‘, ‘getgrnam‘, ‘getpwnam‘, ‘ignore_patterns‘, ‘make_archive‘, ‘move‘, ‘nt‘, ‘os‘, ‘register_archive_format‘, ‘register_unpack_format‘, ‘rmtree‘, ‘stat‘, ‘sys‘, ‘tarfile‘, ‘unpack_archive‘, ‘unregister_archive_format‘, ‘unregister_unpack_format‘, ‘which‘]
  • 1
  • 2

4.1 copy()

chutil.copy(source, destination)
  • 1
  • 2

shutil.copy() 函數實現檔案複製功能,將 source 檔案複製到 destination 檔案夾中,兩個參數都是字串格式。如果 destination 是一個檔案名稱,那麼它會被用來當作複製後的檔案名稱,即等於 複製 + 重新命名。

copy2() 
copy2()工作類似copy(),不過複製到新檔案的中繼資料會包含訪問和修改時間。

4.2 copyfile()

copyfile()將源的內容複寫給目標,如果沒有許可權寫目標檔案則產生IoError 
copyfile()實際是使用了底層函數copyfileobj()。copyfile()的參數是檔案名稱,copyfileobj()的參數是開啟的檔案控制代碼。第三個參數可選,用於讀入塊的緩衝區長度。

4.3 copymode() 複製檔案中繼資料

在UNIX建立一個新檔案,會根據目前使用者的umask接受許可權。要把許可權從一個檔案複製到另一個檔案,可以使用copymode()。

要複製其他中繼資料,可以使用copystat()。 
使用copystat()只會複製與檔案關聯的許可權和日期。

4.4 copytree()處理分類樹 
shutil包含三個函數處理分類樹。要把一個目錄從一個位置複製到另一個位置,使用copytree()。這會遞迴遍曆來源目錄樹,將檔案複製到目標。 
copytree()可以將當前這個實現當作起點,在使用前要讓它更健壯,可以增加一些特性,如進度條。

symlinks參數控制著符號連結作為連結複製還是檔案複製。預設將內容複寫到新檔案,如果選項為true,會在目標中建立新的符號連結。

4.5 rmtree() 
要刪除一個目錄及其內容,可以使用rmtree()。

4.6 move() 
將一個檔案或目錄從一個位置移動到另一個位置,可以使用move()。

4.7 shutil.make_archive(base_name, format, …)

建立壓縮包並返迴文件路徑,例如: zip、tarbase_name: 壓縮包的檔案名稱,也可以是壓縮包的路徑。檔案名稱是儲存到當前路徑,路徑時儲存到指定路徑format: 壓縮包種類, zip, tar, bztar, gztarroot_dir: 要壓縮的檔案夾路徑(預設目前的目錄)owner: 使用者, 預設目前使用者group: 組,預設當前組logger: 使用者於記錄日誌,通常是logging.Logger對象
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
    #將目前的目錄打包放到目前的目錄下    ret = shutil.make_archive(‘dq‘, ‘gztar‘)
  • 1
  • 2
    #將指定目錄打包放到目前的目錄    root_dir = ‘D:/temp/python/zuoye/day6‘    ret = shutil.make_archive(‘dq‘, ‘gztar‘, root_dir=rootdir)
  • 1
  • 2
  • 3
5. random

除了隨機數的產生外,random模組還有很多用處,以下為可能用到的方法:

‘betavariate‘, ‘choice‘, ‘expovariate‘, ‘gammavariate‘, ‘gauss‘, ‘getrandbits‘, ‘getstate‘, ‘lognormvariate‘, ‘normalvariate‘, ‘paretovariate‘, ‘randint‘, ‘random‘, ‘randrange‘, ‘sample‘, ‘seed‘, ‘setstate‘, ‘shuffle‘, ‘triangular‘, ‘uniform‘, ‘vonmisesvariate‘, ‘weibullvariate‘
  • 1
  • 2

5.1 random.random():返回[0.0,1)之間的浮點數

 >>>import random >>>random.random() 0.265150807792064
  • 1
  • 2
  • 3
  • 4

5.2 random.uniform(a, b):返回[a,b]之間的浮點數

5.3 random.randint(a, b):返回[a,b]之間的整數

5.4 random.randrange([start], stop[, step]):從指定範圍內,按指定基數遞增的

random.randrange(10, 100, 2)在結果上與 random.choice(range(10, 100, 2) 等效。
  • 1
  • 2

5.5 random.choice(sequence)。參數sequence表示一個有序類型。這裡要說明一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字串都屬於sequence。

5.6 random.shuffle(x[, random]),用於將一個列表中的元素打亂

5.7 random.sample(sequence, k),從指定序列中隨機擷取指定長度的片斷。sample函數不會修改原有序列。

slice = random.sample(list, 5) #從list中隨機擷取5個元素,作為一個片斷返回
喜歡的朋友可以加QQ群813622576,群內有免費資料供大家一起交流學習

python常用模組part1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.