一、模塊 1.模塊簡介 模塊是一個包含所有你定義的函數和變數的文件,其尾碼名是.py。模塊可以被別的程式引入,以使用該模塊中的函數等功能。這也是使用python標準庫的方法。 類似於函數式編程和麵向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個
一、模塊
1.模塊簡介
模塊是一個包含所有你定義的函數和變數的文件,其尾碼名是.py。模塊可以被別的程式引入,以使用該模塊中的函數等功能。這也是使用python標準庫的方法。
類似於函數式編程和麵向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個複雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱為模塊。
2.模塊的引入
在Python中用關鍵字import來引入某個模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。在調用math模塊中的函數時,必須這樣引用:
1 2 3 4 |
模塊名.函數名
例:
import math
import sys
|
有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可,此時可以通過語句
from 模塊名 import 函數名1,函數名2....
例:
1 2 3 4 5 6 7 |
import module
#從某個模塊導入某個功能
from module.xx.xx import xx
#從某個模塊導入某個功能,並且給他個別名
from module.xx.xx import xx as rename
#從某個模塊導入所有
from module.xx.xx import *
|
模塊分為三種:
-
自定義模塊
-
內置模塊
-
開源模塊
3.模塊的安裝
(1)yum install 模塊名
(2)apt-get
(4)源碼安裝
1 2 3 4 5 6 |
需要編譯環境:yum install python-devel gcc
下載源碼包:wget http: //xxxxxxxxxxx.tar
解壓:tar -xvf xxx.tar
進入:cd xxx
編譯:python setup.py build
安裝:python setup.py install
|
二、自定義模塊
1.在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。
例:
寫一個模塊(模塊文件要和代碼文件在同一目錄下)
1 2 3 4 5 6 7 8 9 10 |
#vim moudle_test.py
#寫入如下代碼
#!/usr/bin/env python3
print ( '自定義 moudle' )
#調用
#vim test.py
#!/usr/bin/env python3
#導入自定義模塊
import moudle_test
#執行test.py
|
2.模塊文件為單獨文件夾 ,文件夾和代碼在同一目錄下
__init__
導入模塊其實就是告訴Python解釋器去解釋那個py文件
-
導入一個py文件,解釋器解釋該py文件
-
導入一個包,解釋器解釋該包下的 __init__.py 文件
3.sys.path添加目錄
如果sys.path路徑列表沒有你想要的路徑,可以通過 sys.path.append('路徑') 添加。
通過os模塊可以獲取各種目錄,例如:
三、內置模塊
1.os模塊 提供系統級別的操作
os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
1 2 3 |
>>> os.getcwd()
'/root'
>>>
|
os.chdir("目錄名") 改變當前腳本工作目錄;相當於linux下cd命令
1 2 3 4 |
>>> os.chdir( '/usr/local' )
>>> os.getcwd()
'/usr/local'
>>>
|
os.curdir 返回當前目錄: ('.')
1 2 |
>>> os.curdir
'.'
|
os.pardir 獲取當前目錄的父目錄字元串名:('..')
1 2 |
>>> os.pardir
'..'
|
os.makedirs('目錄1/目錄2') 可生成多層遞歸目錄(相當於linux下mkdir -p)
1 2 |
>>> os.makedirs( '/python/moudle/' )
# ll /python/moudle/
|
os.removedirs('目錄') 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
1 2 3 |
>>> os.removedirs( '/python/moudle' )
#a目錄中除了有一個b目錄外,再沒有其它的目錄和文件。
#b目錄中必須是一個空目錄。 如果想實現類似rm -rf的功能可以使用shutil模塊
|
os.mkdir('目錄') 生成單級目錄;相當於shell中mkdir 目錄
1 |
>>> os.mkdir( '/python' )
|
os.rmdir('目錄') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir
1 2 3 4 5 |
>>> os.rmdir( '/python' )
>>> os.rmdir( '/python' )
Traceback (most recent call last):
File "<stdin>" , line 1 , in <module>
FileNotFoundError: [Errno 2 ] No such file or directory: '/python'
|
os.listdir('目錄') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印
1 2 |
>>> os.listdir( '/root' )
[ '.Xauthority' , '[email protected]' , '.py.swp' , '.ssh' , 'in.sh' , '1' , 'IPy-0.81.tar.gz' , 'Dockerssh' , 'id_rsa.pub' , 'psutil-2.0.0.tar.gz' , '.python_history' , '.bashrc' , 'ansible' , '.bash_history' , '.vim' , 'IPy-0.81' , '.pip' , '.profile' , '.ansible' , 'python' , '.dockercfg' , 'Docker' , 'util-linux-2.27' , '.viminfo' , 'util-linux-2.27.tar.gz' , 'ubuntu_14.04.tar' , '__pycache__' , 'psutil-2.0.0' , 'xx.py' , 'ip.py' , 'DockerNginx' , '.cache' , 'dict_shop.py' ]
|
os.remove()刪除一個文件
1 |
>>> os.remove( '/root/xx.py' )
|
os.rename("原名","新名") 重命名文件/目錄
1 2 3 4 5 |
>>> os.listdir( '/python' )
[ 'oldtouch' ]
>>> os.rename( 'oldtouch' , 'newtouch' )
>>> os.listdir( '/python' )
[ 'newtouch' ]
|
os.stat('path/filename') 獲取文件/目錄信息
1 2 |
>>> os.stat( 'newtouch' )
os.stat_result(st_mode = 33188 , st_ino = 1048593 , st_dev = 51713 , st_nlink = 1 , st_uid = 0 , st_gid = 0 , st_size = 0 , st_atime = 1453442450 , st_mtime = 1453442450 , st_ctime = 1453442500 )
|
os.sep 輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"
1 2 3 |
>>> os.sep
'/'
>>>
|
os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
1 2 |
>>> os.linesep
'\n'
|
os.pathsep 輸出用於分割文件路徑的字元串
1 2 |
>>> os.pathsep
':'
|
os.name 輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
1 2 |
>>> os.name
'posix'
|
os.system("pwd") 運行shell命令,直接顯示
1 2 3 |
>>> os.system( 'pwd' )
/ python
0
|
os.environ
1 2 |
>>> os.environ
environ({ '_' : '/usr/bin/python3' , 'SSH_CONNECTION' : 省略n個字元
|
os模塊其他語法:
1 2 3 4 5 6 7 8 9 10 11 12 |
os.path模塊主要用於文件的屬性獲取,
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模塊 用於提供對解釋器相關的操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
sys.argv 命令行參數List,第一個元素是程式本身路徑
sys.modules 返回系統導入的模塊欄位,key是模塊名,value是模塊
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]
sys.modules.keys() 返回所有已經導入的模塊名
sys.modules.values() 返回所有已經導入的模塊
sys.exc_info() 獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息
sys. exit (n) 退出程式,正常退出時 exit (0)
sys.hexversion 獲取Python解釋程式的版本值,16進位格式如:0x020403F0
sys.version 獲取Python解釋程式的
sys.api_version 解釋器的C的API版本
sys.version_info
‘final’表示最終,也有’candidate’表示候選,serial表示版本級別,是否有後繼的發行
sys.displayhook(value) 如果value非空,這個函數會把他輸出到sys.stdout,並且將他保存進__builtin__._.指在python的互動式解釋器里,’_’ 代表上次你輸入得到的結果,hook是鉤子的意思,將上次的結果鉤過來
sys.getdefaultencoding() 返回當前你所用的預設的字元編碼格式
sys.getfilesystemencoding() 返回將Unicode文件名轉換成系統文件名的編碼的名字
sys.setdefaultencoding(name)用來設置當前預設的字元編碼,如果name和任何一個可用的編碼都不匹配,拋出 LookupError,這個函數只會被site模塊的sitecustomize使用,一旦別site模塊使用了,他會從sys模塊移除
sys.builtin_module_names Python解釋器導入的模塊列表
sys.executable Python解釋程式路徑
sys.getwindowsversion() 獲取Windows的版本
sys.copyright 記錄python版權相關的東西
sys.byteorder 本地位元組規則的指示器,big-endian平臺的值是’big’,little-endian平臺的值是’little’
sys.exc_clear() 用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exec_prefix 返回平臺獨立的python文件安裝的位置
sys.stderr 錯誤輸出
sys.stdin 標準輸入
sys.stdout 標準輸出
sys.platform 返回操作系統平臺名稱
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.maxunicode 最大的Unicode值
sys.maxint 最大的Int值
sys.version 獲取Python解釋程式的版本信息
sys.hexversion 獲取Python解釋程式的版本值,16進位格式如:0x020403F0
|
3.hashlib模塊
Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。
什麼是摘要演算法呢?摘要演算法又稱哈希演算法、散列演算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進位的字元串表示)用於加密相關的操作,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法
1)MD5演算法
1 2 3 4 5 |
>>> import hashlib
>>> hash = hashlib.md5()
>>> hash .update( 'liuyao199539' .encode( 'utf-8' ))
>>> hash .hexdigest()
'69ce9b5f54ba01b6d31256596e3fbb5c'
|
1.首先從python直接導入hashlib模塊
2.調用hashlib里的md5()生成一個md5 hash對象
3.生成hash對象後,就可以用update方法對字元串進行md5加密的更新處理
4.繼續調用update方法會在前面加密的基礎上更新加密
5.在3.x幾的版本上update裡面需要加.encode(
'utf-8'
),而2.x的版本不需要
2)sha1演算法
1 2 3 4 5 |
>>> import hashlib
>>> sha_1 = hashlib.sha1()
>>> sha_1.update( 'liuyao' .encode( 'utf-8' ))
>>> sha_1.hexdigest()
'dd34a806b733f6d02244f39bcc1af87819fcaa82'
|
3)sha256演算法
1 2 3 4 5 |
>>> import hashlib
>>> sha_256 = hashlib.sha256()
>>> sha_256.update( 'liuyao' .encode( 'utf-8' ))
>>> sha_256.hexdigest()
'5ad988b8fa43131f33f4bb867207eac4a1fcf56ff529110e2d93f2cc7cfab038'
|
4)sha384演算法
1 2 3 4 5 |
>>> import hashlib
>>> sha_384 = hashlib.sha384()
>>> sha_384.update( 'liuyao' .encode( 'utf-8' ))
>>> sha_384.hexdigest()
'03ca6dcd5f83276b96020f3227d8ebce4eebb85de716f37b38bd9ca3922520efc67db8efa34eba09bd01752b0313dba3'
|
5)sha512演算法