模塊,用一砣代碼實現了某個功能的代碼集合html
相似於函數式編程和麪向過程編程,函數式編程則完成一個功能,其餘代碼用來調用便可,提供了代碼的重用性和代碼間的耦合。而對於一個複雜的功能來,可能須要多個函數才能完成(函數又能夠在不一樣的.py文件中),n個 .py 文件組成的代碼集合就稱爲模塊。python
爲了實現某一個功能,且是實現的全部代碼的集合。
因此它存在形式有2中:
一個.py文件,
文件夾(包)算法
如:os 是系統相關的模塊;file是文件操做相關的模塊shell
模塊分爲三種:編程
導入模塊 json
導入模塊有一下幾種方法:bash
import sys #導入模塊 from sys import argv #導入模塊某個功能 from sys import argv as abc #別名,防止功能重名 from sys import * #導入模塊全部功能
C:\Python27\lib\site-packages #開源模塊默認存放位置,能夠直接導入
import sys #C:\Python27\lib\site-packages #開源模塊默認存放位置,能夠直接導入 for i in sys.path: print i #########result############# D:\11期python\day5 #自動把執行的文件的當前路徑加入path裏
C:\Python27\lib\site-packages\paramiko-1.16.0-py2.7.egg C:\Python27\lib\site-packages\ecdsa-0.13-py2.7.egg D:\11期python\day5 C:\Windows\system32\python27.zip C:\Python27\DLLs C:\Python27\lib C:\Python27\lib\plat-win C:\Python27\lib\lib-tk C:\Python27 C:\Python27\lib\site-packages
import sys #導入模塊 sys.path.append('D:\\') #使用某個模塊,就要加載模塊的路徑 ############### import sys import os pre_path = os.path.abspath('../') #經過os模塊能夠獲取各類目錄 sys.path.append(pre_path)
導入模塊其實就是告訴Python解釋器去解釋那個py文件服務器
1、下載安裝網絡
下載安裝有兩種方式:app
方式一:
yum pip apt-get ...
方式二: 下載源碼 解壓源碼 進入目錄 編譯源碼 python setup.py build 安裝源碼 python setup.py install
注:在使用源碼安裝時,須要使用到gcc編譯和python開發環境,因此,須要先執行:
yum install gcc yum install python-devel 或 apt-get python-dev
安裝成功後,模塊會自動安裝到 sys.path 中的某個目錄中,如:/
usr
/
lib
/
python2.
7
/
site
-
packages
/
2、導入模塊
同自定義模塊中導入的方式:
3、模塊 paramiko
paramiko是一個用於作遠程控制的模塊,使用該模塊能夠對遠程服務器進行命令或文件操做,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現實。
一、下載安裝
# pycrypto,因爲 paramiko 模塊內部依賴pycrypto,因此先下載安裝pycrypto # 下載安裝 pycrypto wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz tar -xvf pycrypto-2.6.1.tar.gz cd pycrypto-2.6.1 python setup.py build python setup.py install # 進入python環境,導入Crypto檢查是否安裝成功 # 下載安裝 paramiko wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz tar -xvf paramiko-1.10.1.tar.gz cd paramiko-1.10.1 python setup.py build python setup.py install # 進入python環境,導入paramiko檢查是否安裝成功
二、使用模塊
執行命令 - 經過用戶名和密碼鏈接服務器 #!/usr/bin/env python #coding:utf-8 import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.108', 22, 'alex', '123') stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() ssh.close(); 執行命令 - 過密鑰連接服務器 import paramiko private_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('主機名 ', 端口, '用戶名', key) stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() ssh.close() 上傳或者下載文件 - 經過用戶名和密碼 import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test.py','/tmp/test.py') t.close() import os,sys import paramiko t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test.py','/tmp/test2.py') t.close() 上傳或下載文件 - 經過密鑰 import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.put('/tmp/test3.py','/tmp/test3.py') t.close() import paramiko pravie_key_path = '/home/auto/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(pravie_key_path) t = paramiko.Transport(('182.92.219.86',22)) t.connect(username='wupeiqi',pkey=key) sftp = paramiko.SFTPClient.from_transport(t) sftp.get('/tmp/test3.py','/tmp/test4.py') t.close()
1、os
用於提供系統級別的操做
os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd os.curdir 返回當前目錄: ('.') os.pardir 獲取當前目錄的父目錄字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 os.remove() 刪除一個文件 os.rename("oldname","newname") 重命名文件/目錄 os.stat('path/filename') 獲取文件/目錄信息 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" os.pathsep 輸出用於分割文件路徑的字符串 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' os.system("bash command") 運行shell命令,直接顯示 os.environ 獲取系統環境變量 os.path.abspath(path) 返回path規範化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False os.path.isabs(path) 若是path是絕對路徑,返回True os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間
更多猛擊這裏
2、sys
用於提供對解釋器相關的操做
sys.argv 命令行參數List,第一個元素是程序自己路徑 sys.exit(n) 退出程序,正常退出時exit(0) sys.version 獲取Python解釋程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 sys.platform 返回操做系統平臺名稱 sys.stdout.write('please:') val = sys.stdin.readline()[:-1]
更多猛擊這裏
3、hashlib 和 hmac 模塊
用於加密相關的操做,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
hmac模塊實現了hmac算法,須要一個key來進行加密
import md5 hash = md5.new() hash.update('admin') print hash.hexdigest()
import sha hash = sha.new() hash.update('admin') print hash.hexdigest()
>>> import hashlib >>> for i in dir(hashlib):print i ... __all__ __builtins__ __doc__ __file__ __get_builtin_constructor __name__ __package__ _hashlib algorithms algorithms_available algorithms_guaranteed md5 new pbkdf2_hmac sha1 sha224 sha256 sha384 sha512
查看hashlib加密類型
>>> hashlib.algorithms ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
# ######## md5 ######## hash = hashlib.md5() hash.update('abc') print hash.hexdigest() 900150983cd24fb0d6963f7d28e17f72 # ######## sha1 ######## hash = hashlib.sha1() hash.update('abc') print hash.hexdigest() a9993e364706816aba3e25717850c26c9cd0d89d # ######## sha256 ######## hash = hashlib.sha256() hash.update('abc') print hash.hexdigest() ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad # ######## sha384 ######## hash = hashlib.sha384() hash.update('abc') print hash.hexdigest() cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7 # ######## sha512 ######## hash = hashlib.sha512() hash.update('abc') print hash.hexdigest() ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
以上加密算法雖然依然很是厲害,但時候存在缺陷,即:經過撞庫能夠反解。因此,有必要對加密算法中添加自定義key再來作加密。
1 import hashlib 2 # ######## md5 ######## 3 >>> hash = hashlib.md5("sljldjf") 4 >>> hash.update("abc") 5 >>> print hash.hexdigest() 6 b878ac8ea0974a1c1f0d6db8cbd57e02
python 還有一個 hmac 模塊,它內部對咱們建立 key 和 內容 再進行處理而後再加密
>>> import hmac >>> hash = hmac.new("oooooo") >>> hash.update("abc") >>> print hash.hexdigest() 9b9b40a51d23843684c038d03792397b
4、ConfigParser
用於對特定的配置進行操做,當前模塊的名稱在 python 3.x 版本中變動爲 configparser
import ConfigParser config = ConfigParser.ConfigParser() #建立實例 config.read('abc.cnf') #讀取配置文件 # ########## 讀 ########## #secs = config.sections() #返回配置文件中節序列 #print secs #['section1', 'section2'] #options = config.options('sction1') #返回某個項目中的全部鍵的序列 #print options #['k1', 'k2'] #item_list = config.items('section1') #獲取sections下全部鍵值對 #print item_list #[('k1', 'v1'), ('k2', 'v2')] #val = config.get('group1','key') #獲得section中option的值,返回爲string類型 #val = config.getint('group1','key') #獲得section中option的值,再執行int() # ########## 改寫 ########## #sec = config.remove_section('section1') #內存中刪除section #config.write(open('abc.cnf', "w")) #從新config內存中全部數據 #sec = config.remove_option('section2','k1') #刪除section中某一個option #sec = config.has_section('section3') #有沒有這個section,返回bool型 #sec = config.add_section('section3') #添加一個section,存在則報錯 #config.write(open("abc.cnf", "w")) #config.set('section2','k1',11111) #設置section節點中,鍵名爲option的值(val),section不存在則報錯 #config.write(open('abc.cnf', "w"))
5、json 和 pickle
用於序列化的兩個模塊
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
Json 能夠作到不一樣程序內存之間的交換,但只能轉換通常經常使用的格式。
兩個獨立程序間內存是隔離的,程序之間交互能夠經過網絡(只能發字符串)、硬盤(存儲格式只能是字符串)。
pickle 能夠序列化大部分數據類型
>>> import json >>> for i in dir(json):print i ... JSONDecoder JSONEncoder __all__ __author__ __builtins__ __doc__ __file__ __name__ __package__ __path__ __version__ _default_decoder _default_encoder decoder dump #將數據經過特殊的形式轉換爲全部程序都認識的字符串,並寫入文件 dumps #將數據經過特殊的形式轉換爲全部程序都認識的字符串 encoder load loads scanner
重要函數
編碼:把一個Python對象編碼轉換成Json字符串 json.dumps()
解碼:把Json格式字符串解碼轉換成Python對象 json.loads()
## 解碼: json.loads(),把Json格式字符串解碼轉換成Python對象 >>> import json >>> s = json.loads('{"name":"abc","type":{"name":"seq","parameter":["1","2"]}}') >>> print s.keys() [u'type', u'name'] >>> print s['type'] {u'parameter': [u'1', u'2'], u'name': u'seq'} >>> print s['type']['name'] seq ##編碼: json.dumps(),把一個Python對象編碼轉換成Json字符串 >>> data = {'a':123,"b":[1,2]} >>> d1 = json.dumps(data) >>> type(data) <type 'dict'> >>> type(d1) <type 'str'> >>> d2 = json.loads(d1) >>> type(d2) <type 'dict'>
############# dumps 編碼後的json格式字符串緊湊的輸出,並且也沒有順序,所以dumps方法提供了一些可選的參數,讓輸出的格式提升可讀性,如sort_keys是告訴編碼器按照字典排序(a到z)輸出 排序 sort_keys=True data1 = {'b':789,'c':456,'a':123} data2 = {'a':123,'b':789,'c':456} d1 = json.dumps(data1,sort_keys=True) d2 = json.dumps(data2) d3 = json.dumps(data2,sort_keys=True) >>> print d1 {"a": 123, "b": 789, "c": 456} >>> print d2 {"a": 123, "c": 456, "b": 789} >>> print d3 {"a": 123, "b": 789, "c": 456} >>> print d1==d2 False 縮進參數 indent參數根據數據格式縮進顯示,讀起來更加清晰 data1 = {'b':789,'c':456,'a':123} d1 = json.dumps(data1,sort_keys=True,indent=4) >>> print d1 { "a": 123, "b": 789, "c": 456 } separators參數的做用是去掉,,:後面的空格,在咱們傳輸數據的過程當中,越精簡越好,冗餘的東西所有去掉,所以就能夠加上separators參數: import json data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ] print 'DATA:', repr(data) print 'repr(data) :', len(repr(data)) print 'dumps(data) :', len(json.dumps(data)) print 'dumps(data, indent=2) :', len(json.dumps(data, indent=2)) print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':'))) >>> json.dumps(data) '[{"a": "A", "c": 3.0, "b": [2, 4]}]' >>> json.dumps(data,indent=2) '[\n {\n "a": "A", \n "c": 3.0, \n "b": [\n 2, \n 4\n ]\n }\n]' >>> json.dumps(data,separators=(',',':')) '[{"a":"A","c":3.0,"b":[2,4]}]' ###### dunmp 將數據經過特殊的形式轉換爲全部程序都認識的字符串,並寫入文件 import json readed = json.load(open('jsonsource.dat', 'r')) json.dump(readed, open('newjsonfile.dat', 'w')) 或者 with open('D:/result.json','w') as fp: json.dump(data,fp)