6.python模塊(導入,內置,自定義,開源)

122683636 9年前發布 | 52K 次閱讀 Python 開源 Python開發

來自: http://www.cnblogs.com/liu-yao/p/5186322.html

一、模塊

1.模塊簡介

模塊是一個包含所有你定義的函數和變量的文件,其后綴名是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。這也是使用python標準庫的方法。

類似于函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對于一個復雜的功能來,可能需要多個函數才能完成(函數又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱為模塊。

2.模塊的引入

在Python中用關鍵字import來引入某個模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。在調用math模塊中的函數時,必須這樣引用:

模塊名.函數名
例:
importmath
importsys

有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可,此時可以通過語句

from 模塊名 import 函數名1,函數名2....

例:

importmodule

從某個模塊導入某個功能

frommodule.xx.xximportxx

從某個模塊導入某個功能,并且給他個別名

frommodule.xx.xximportxx as rename 

從某個模塊導入所有

frommodule.xx.xximport*</pre>

模塊分為三種:

  • 自定義模塊

  • 內置模塊

  • 開源模塊

3.模塊的安裝

(1)yum install 模塊名

(2)apt-get

(3)pip安裝 參考使用( 點擊

(4)源碼安裝

需要編譯環境: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文件都可以作為一個模塊,模塊的名字就是文件的名字。

例:

寫一個模塊(模塊文件要和代碼文件在同一目錄下)

#vim moudle_test.py

寫入如下代碼

!/usr/bin/env python3

print ('自定義 moudle')

調用

vim test.py

!/usr/bin/env python3

導入自定義模塊

importmoudle_test

執行test.py</pre>

2.模塊文件為單獨文件夾 ,文件夾和代碼在同一目錄下

__init__

導入模塊其實就是告訴Python解釋器去解釋那個py文件

  • 導入一個py文件,解釋器解釋該py文件

  • 導入一個包,解釋器解釋該包下的 __init__.py 文件

3. sys.path添加目錄

如果 sys.path 路徑列表沒有你想要的路徑,可以通過 sys.path.append('路徑') 添加。
通過os模塊可以獲取各種目錄,例如:

三、內置模塊

1.os模塊 提供系統級別的操作

os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
>>> os.getcwd()
'/root'
>>> 
os.chdir("目錄名")  改變當前腳本工作目錄;相當于linux下cd命令
>>> os.chdir('/usr/local')
>>> os.getcwd()
'/usr/local'
>>> 
os.curdir 返回當前目錄: ('.')
>>> os.curdir
'.'
os.pardir  獲取當前目錄的父目錄字符串名:('..')
>>> os.pardir
'..'
os.makedirs('目錄1/目錄2') 可生成多層遞歸目錄(相當于linux下mkdir -p)
>>> os.makedirs('/python/moudle/')

ll /python/moudle/</pre>

os.removedirs('目錄') 若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推
>>> os.removedirs('/python/moudle')

a目錄中除了有一個b目錄外,再沒有其它的目錄和文件。

b目錄中必須是一個空目錄。 如果想實現類似rm -rf的功能可以使用shutil模塊</pre>

os.mkdir('目錄')  生成單級目錄;相當于shell中mkdir 目錄
>>> os.mkdir('/python')
os.rmdir('目錄')  刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir
>>> os.rmdir('/python')
>>> os.rmdir('/python')
Traceback (most recent call last):
  File"<stdin>", line1,in<module>
FileNotFoundError: [Errno 2] No suchfileordirectory:'/python'
os.listdir('目錄') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
>>> os.listdir('/root')
['.Xauthority','yaoyao@192.168.42.51','.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()刪除一個文件
>>> os.remove('/root/xx.py')
os.rename("原名","新名")  重命名文件/目錄
>>> os.listdir('/python')
['oldtouch']
>>> os.rename('oldtouch','newtouch')
>>> os.listdir('/python')
['newtouch']
os.stat('path/filename')  獲取文件/目錄信息
>>> 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下為"/"
>>> os.sep
'/'
>>> 
os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
>>> os.linesep
'\n'
os.pathsep    輸出用于分割文件路徑的字符串
>>> os.pathsep
':'
os.name    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
>>> os.name
'posix'
os.system("pwd")  運行shell命令,直接顯示
>>> os.system('pwd')
/python
0

os.environ

>>> os.environ
environ({'_':'/usr/bin/python3','SSH_CONNECTION': 省略n個字符

os模塊 其他 語法:

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模塊 用于提供對解釋器相關的操作

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算法

>>> importhashlib
>>> 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算法

>>> importhashlib
>>> sha_1 =hashlib.sha1()
>>> sha_1.update('liuyao'.encode('utf-8'))
>>> sha_1.hexdigest()
'dd34a806b733f6d02244f39bcc1af87819fcaa82'

3) sha256算法

>>> importhashlib
>>> sha_256 =hashlib.sha256()
>>> sha_256.update('liuyao'.encode('utf-8'))
>>> sha_256.hexdigest()
'5ad988b8fa43131f33f4bb867207eac4a1fcf56ff529110e2d93f2cc7cfab038'

4)sha384算法

>>> importhashlib
>>> sha_384 =hashlib.sha384()
>>> sha_384.update('liuyao'.encode('utf-8'))
>>> sha_384.hexdigest()
'03ca6dcd5f83276b96020f3227d8ebce4eebb85de716f37b38bd9ca3922520efc67db8efa34eba09bd01752b0313dba3'

5)sha512算法

>>> importhashlib
>>> sha_512 =hashlib.sha512()
>>> sha_512.update('liuyao'.encode('utf-8'))
>>> sha_512.hexdigest()
'65cac3a90932e7e033a59294d27bfc09d9e47790c31698ecbfdd5857ff63b7342d0e438a1c996b5925047195932bc5b0a6611b9f2292a2f41e3ea950c4c4952b'

6) 對加密算法中添加自定義key再來做加密,防止被撞庫破解

>>> md5_key =hashlib.md5('jwhfjsdjbwehjfgb'.encode('utf--8'))
>>> md5_key.update('liuyao'.encode('utf-8'))
>>> md5_key.hexdigest()
'609b558ec8d8e795deec3a94f578b020'

注: hmac 模塊,它內部對我們創建 key 和 內容 再進行處理然后再加密

importhmac
hm =hmac.new('liuyao'.encode('utf-8'))
hm.update('hellowo'.encode('utf-8'))
print(hm.hexdigest())

4. configparser 模塊(在2.x版本為: ConfigParser )

用于對特定的配置文件進行操作

配置文件的格式是: []包含的叫section,    section 下有option=value這樣的鍵值

用法:

讀取配置方法

-read(filename) 直接讀取ini文件內容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到該section的所有option
-items(section) 得到該section的所有鍵值對
-get(section,option) 得到section中option的值,返回為string類型
-getint(section,option) 得到section中option的值,返回為int類型

寫入配置方法

-add_section(section) 添加一個新的section
-set( section, option, value) 對section中的option進行設置

需要調用write將內容寫入配置文件。

案例:

測試配置文件:

[liuyao]
passwd = 123456
card = 6230582403988888888
limit = 150000
debt = 0
interest = 0.5
[mayun]
passwd = 234567
card = 6230582403911111111
limit = 150000
debt = 0
interest = 0.5
[donghang]
passwd = 234567
card = 6230582403900000000
limit = 150000
debt = 0
interest = 0.5

方法:

#!/usr/bin/env pythonimport configparser
#生成config對象
config = configparser.ConfigParser()
#用config對象讀取配置文件
config.read('test_con')
#以列表形式返回所有的section
sections = config.sections()print ('sections',sections)
#得到指定section的所有option
options = config.options("liuyao")print ('options',options)
#得到指定section的所有鍵值對
kvs = config.items("liuyao")print ('kvs',kvs)
#指定section,option讀取值
str_val = config.get("liuyao", "card")
int_val = config.getint("liuyao", "limit")print ('liuyao  card',str_val)print ('liuyao  limit',int_val)
#修改寫入配置文件
#更新指定section,option的值
config.set("mayun", "limit", "110000")
int_val = config.getint("mayun", "limit")print ('mayun  limit',int_val)
#寫入指定section增加新option和值
config.set("liuyao", "age", "21")
int_val = config.getint("liuyao", "age")print ('liuyao  age',int_val)
#增加新的section
config.add_section('duobian')
config.set('duobian', 'age', '21')
#寫回配置文件
config.write(open("test_con",'w')

輸出結果:

sections ['liuyao','mayun','donghang','aoteman']
options ['passwd','card','limit','debt','interest','age']
kvs [('passwd','123456'), ('card','6230582403988888888'), ('limit','150000'), ('debt','0'), ('interest','0.5'), ('age','21')]
liuyao 的 card 6230582403988888888
liuyao 的 limit 150000
mayun 的 limit 110000
liuyao 的 age 21

配置文件:

5.Subprocess模塊

subprocess最早是在2.4版本中引入的。

subprocess模塊用來生成子進程,并可以通過管道連接它們的輸入/輸出/錯誤,以及獲得它們的返回值。

它用來代替多個舊模塊和函數:

os.system

os.spawn*

os.popen*

popen2.*

commands.*

運行python的時候,我們都是在創建并運行一個進程。像Linux進程那樣,一個進程可以fork一個子進程,并讓這個子進程exec另外一個程序。在Python中,我們通過標準庫中的subprocess包來fork一個子進程,并運行一個外部的程序。 subprocess包中定義有數個創建子進程的函數,這些函數分別以不同的方式創建子進程,所以我們可以根據需要來從中選取一個使用。另外subprocess還提供了一些管理標準流(standard stream)和管道(pipe)的工具,從而在進程間使用文本通信。

使用:

1)call 

執行命令,返回狀態碼 shell = True ,允許 shell 命令是字符串形式

>>> importsubprocess
>>> ret =subprocess.call(['ls','-l'],shell=False)
total 201056
-rw-r--r-- 1root  root        22Jan1511:551
drwxr-xr-x 5root  root      4096Jan 816:33ansible
-rw-r--r-- 1root  root      6830Jan1509:41dict_shop.py
drwxr-xr-x 4root  root      4096Jan1316:05Docker
drwxr-xr-x 2root  root      4096Dec2214:53DockerNginx
drwxr-xr-x 2root  root      4096Jan2117:30Dockerssh
-rw-r--r-- 1root  root       396Dec2517:30id_rsa.pub

2) check_call

執行命令,如果執行狀態碼是 0 ,則返回0,否則拋異常

>>> subprocess.check_call(["ls","-l"])
total 201056
-rw-r--r-- 1root  root        22Jan1511:551
drwxr-xr-x 5root  root      4096Jan 816:33ansible
-rw-r--r-- 1root  root      6830Jan1509:41dict_shop.py
>>> subprocess.check_call("exit 1", shell=True)
Traceback (most recent call last):
  File"<stdin>", line1,in<module>

3.check_output

執行命令,如果狀態碼是 0 ,則返回執行結果,否則拋異常

subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)

4.subprocess.Popen(...)

用于執行復雜的系統命令

參數:

  • args:shell命令,可以是字符串或者序列類型(如:list,元組)

  • bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區大小,負值 系統緩沖

  • stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄

  • preexec_fn:只在Unix平臺下有效,用于指定一個可執行對象(callable object),它將在子進程運行之前被調用

  • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。

    所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。

  • shell:同上

  • cwd:用于設置子進程的當前目錄

  • env:用于指定子進程的環境變量。如果env = None,子進程的環境變量將從父進程中繼承。

  • universal_newlines:不同系統的換行符不同,True -> 同意使用 \n

  • startupinfo與createionflags只在windows下有效

    將被傳遞給底層的CreateProcess()函數,用于設置子進程的一些屬性,如:主窗口的外觀,進程的優先級等等

例:

importsubprocess
res = subprocess.Popen(["mkdir","sub"])
res2 = subprocess.Popen("mkdir sub_1", shell=True)

終端輸入的命令分為兩種:

  • 輸入即可得到輸出,如:ifconfig

  • 輸入進行某環境,依賴再輸入,如:python

>>> obj =subprocess.Popen("mkdir cwd", shell=True, cwd='/home/',)

importsubprocess
 
obj =subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write('print 1 \n ')
obj.stdin.write('print 2 \n ')
obj.stdin.write('print 3 \n ')
obj.stdin.write('print 4 \n ')
obj.stdin.close()
 
cmd_out =obj.stdout.read()
obj.stdout.close()
cmd_error =obj.stderr.read()
obj.stderr.close()
 
printcmd_out
printcmd_error
importsubprocess
 
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write('print 1 \n ')
obj.stdin.write('print 2 \n ')
obj.stdin.write('print 3 \n ')
obj.stdin.write('print 4 \n ')
 
out_error_list = obj.communicate()
print out_error_list
importsubprocess
 
obj =subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out_error_list =obj.communicate('print "hello"')
printout_error_list

7.時間模塊

1)time模塊

time.time()函數返回從1970年1月1日以來的秒數,這是一個浮點數

>>> importtime
>>> time.time()
1453684281.110071
print(time.clock()) #返回處理器時間,3.3開始已廢棄
print(time.process_time()) #返回處理器時間,3.3開始已廢棄
print(time.time()) #返回當前系統時間戳
print(time.ctime()) #輸出Tue Jan 2618:23:482016,當前系統時間
print(time.ctime(time.time()-86640)) #將時間戳轉為字符串格式
print(time.gmtime(time.time()-86640)) #將時間戳轉換成struct_time格式
print(time.localtime(time.time()-86640)) #將時間戳轉換成struct_time格式,但返回 的本地時間
print(time.mktime(time.localtime())) #與time.localtime()功能相反,將struct_time格式轉回成時間戳格式

time.sleep(4) #sleep

print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將struct_time格式轉成指定的字符串格式 print(time.strptime("2016-01-28","%Y-%m-%d") ) #將字符串格式轉換成struct_time格式</pre>

2)datetime模塊

print(datetime.date.today()) #輸出格式 2016-01-26
print(datetime.date.fromtimestamp(time.time()-864400) )#2016-01-16 將時間戳轉成日期格式
current_time =datetime.datetime.now()#
print(current_time)#輸出2016-01-26 19:04:30.335935
print(current_time.timetuple())#返回struct_time格式
  

datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])

print(current_time.replace(2014,9,12))#輸出2014-09-12 19:06:24.074900,返回當前時間,但指定的值將被替換    str_to_date =datetime.datetime.strptime("21/11/06 16:30","%d/%m/%y %H:%M")#將字符串轉換成日期格式 new_date =datetime.datetime.now()+datetime.timedelta(days=10)#比現在加10天 new_date =datetime.datetime.now()+datetime.timedelta(days=-10)#比現在減10天 new_date =datetime.datetime.now()+datetime.timedelta(hours=-10)#比現在減10小時 new_date =datetime.datetime.now()+datetime.timedelta(seconds=120)#比現在+120s print(new_date)</pre>

8.Logging日志模塊

</div>

1、簡單日志打印

#導入日志模塊
importlogging

簡單級別日志輸出

logging.debug('[debug 日志]') logging.info('[info 日志]') logging.warning('[warning 日志]') logging.error('[error 日志]') logging.critical('[critical 日志]')</pre>

輸出:

WARNING:root:[warning 日志]
ERROR:root:[error 日志]
CRITICAL:root:[critical 日志]

可見,默認情況下python的logging模塊將日志打印到了標準輸出中,且只顯示了大于等于WARNING級別的日志,

這說明默認的日志級別設置為 WARNING

(日志級別等級 CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET)

</div>

默認的日志格式為:
       日志級別:Logger名稱:用戶輸出消息

2.靈活配置日志級別,日志格式,輸出位置

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='log.log',
                    filemode='w')
 
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

日志文件:

在logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有

filename:   用指定的文件名創建FiledHandler(后邊會具體講解handler的概念),這樣日志會被存儲在指定的文件中。

filemode:   文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。

format:     指定handler使用的日志顯示格式。

datefmt:    指定日期時間格式。(datefmt='%a, %d %b %Y %H:%M:%S',%p)

level:      設置rootlogger(后邊會講解具體概念)的日志級別

stream:     用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件,默認為sys.stderr。

若同時列出了filename和stream兩個參數,則stream參數會被忽略。

format參數中可能用到的格式化串:

%(name)s             Logger的名字

%(levelno)s          數字形式的日志級別

%(levelname)s     文本形式的日志級別

%(pathname)s     調用日志輸出函數的模塊的完整路徑名,可能沒有

%(filename)s        調用日志輸出函數的模塊的文件名

%(module)s          調用日志輸出函數的模塊名

%(funcName)s     調用日志輸出函數的函數名

%(lineno)d           調用日志輸出函數的語句所在的代碼行

%(created)f          當前時間,用UNIX標準的表示時間的浮 點數表示

%(relativeCreated)d    輸出日志信息時的,自Logger創建以 來的毫秒數

%(asctime)s                 字符串形式的當前時間。默認格式是 “2003-07-08 16:49:45,896”。逗號后面的是毫秒

%(thread)d                  線程ID。可能沒有

%(threadName)s         線程名。可能沒有

%(process)d               進程ID。可能沒有

%(message)s             用戶輸出的消息

3.Logger,Handler,Formatter,Filter的概念

logging.basicConfig()(用默認日志格式(Formatter)為日志系統建立一個默認的流處理器(StreamHandler),

設置基礎配置(如日志級別等)并加到root logger(根Logger)中)這幾個logging模塊級別的函數,

另外還有一個模塊級別的函數是logging.getLogger([name])(返回一個logger對象,如果沒有指定名字將返回root logger)

1). logging庫提供了多個組件:Logger、Handler、Filter、Formatter。

Logger       對象提供應用程序可直接使用的接口,

Handler      發送日志到適當的目的地,

Filter          提供了過濾日志信息的方法,

Formatter   指定日志顯示格式。

# 創建一個logger
logger = logging.getLogger()

創建一個帶用戶名的logger

logger1 = logging.getLogger('liuyao')

設置一個日志級別

logger.setLevel(logging.INFO) logger1.setLevel(logging.INFO)

創建一個handler,用于寫入日志文件

fh = logging.FileHandler('log.log')

再創建一個handler,用于輸出到控制臺

ch = logging.StreamHandler()

定義handler的輸出格式formatter

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter)

給logger添加handler

logger.addFilter(filter)

logger.addHandler(fh) logger.addHandler(ch)

給logger1添加handler

logger1.addFilter(filter)

logger1.addHandler(fh) logger1.addHandler(ch)

給logger添加日志

logger.info('logger info message') logger1.info('logger1 info message')</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

輸出:

2016-02-0321:11:38,739-root-INFO-logger info message
2016-02-0321:11:38,740-liuyao-INFO-logger1 info message
2016-02-0321:11:38,740-liuyao-INFO-logger1 info message

對于等級:

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

9. json 和 pickle 模塊

  用于序列化的兩個模塊

  • json,用于字符串 和 python數據類型間進行轉換

  • pickle,用于python特有的類型 和 python的數據類型間進行轉換

Json模塊提供了四個功能:dumps、dump、loads、load

pickle模塊提供了四個功能:dumps、dump、loads、load

1. Json模塊

四個功能:dumps、dump、loads、load

1).dumps

name ={'liuyao':'["age",12]',
        'yaoyai':'["age",21]'}
print(name)
print(type(name))
a =json.dumps(name)
print(a)
print(type(a))

輸出:

{'yaoyai':'["age",21]','liuyao':'["age",12]'}
<class'dict'>
{"yaoyai":"[\"age\",21]","liuyao":"[\"age\",12]"}
<class'str'>

2)

10. shelve 模塊

shelve模塊是一個簡單的k,v將內存數據通過文件持久化的模塊,可以持久化任何pickle可支持的python數據格式

importshelve
  
d =shelve.open('shelve_test')#打開一個文件
  
classTest(object):
    def__init__(self,n):
        self.n=n
  
  
t =Test(123)
t2 =Test(123334)
  
name =["alex","rain","test"]
d["test"]=name#持久化列表
d["t1"]=t     #持久化類
d["t2"]=t2
  
d.close()

10、random模塊

random模塊是專門用來生成隨機數的

1).random.random

random.random()用于生成一個0到1的隨機符點數: 0 <= n < 1.0

例:

importrandom
>>> print(random.random)
<built-inmethod random of Randomobjectat0x10d2c18>
>>> print(random.random())
0.2822925070315372

2)random.uniform

random.uniform的函數原型為:random.uniform(a, b),用于生成一個指定范圍內的隨機符點數,兩個參數其中一個是上限,一個是下限。如果a > b,則生成的隨機數n: a <= n <= b。如果 a <b, 則 b <= n <= a。

例:

>>> random.uniform(5,10)
5.39403122881387
>>> random.uniform(10,10)
10.0
>>> random.uniform(10,5)
8.647718450387307
>>> 

3)random.randint

random.randint()的函數原型為:random.randint(a, b),用于生成一個指定范圍內的整數。其中參數a是下限,參數b是上限,生成的隨機數n: a <= n <= b,下限必須小于上限.

例:

>>> random.randint(10,20)
20
>>> random.randint(10,20)
14
>>> random.randint(10,20)
10

4)random.randrange

random.randrange的函數原型為:random.randrange([start], stop[, step]),從指定范圍內,按指定基數遞增的集合中 獲取一個隨機數。如:random.randrange(10, 100, 2),結果相當于從[10, 12, 14, 16, ... 96, 98]序列中獲取一個隨機數。random.randrange(10, 100, 2)在結果上與 random.choice(range(10, 100, 2) 等效。

例:

>>> random.randrange(1,37,2)
17
>>> random.randrange(1,37)
28

5)random.choice

random.choice從序列中獲取一個隨機元素。其函數原型為:random.choice(sequence)。參數sequence表示一個有序類型。這里要 說明  一下:sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬于sequence。有關sequence可以查看python手冊數據模型這一章。

例:

>>> random.choice('liuyao')
'l'
>>> random.choice('liuyao')
'u'

6)random.shuffle

random.shuffle的函數原型為:random.shuffle(x[, random]),用于將一個列表中的元素打亂。如:

例:

>>> p =["Python","is","simple","and so on..."] 
>>> random.shuffle(p)
>>> print(p)
['Python','and so on...','simple','is']

7)random.sample

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

>>> li =[1,2,3,4,5,6,7,8,9,10]
>>> slice=random.sample(li,5)
>>> print(slice)
[3,10,5,6,8]
>>> print(li)
[1,2,3,4,5,6,7,8,9,10]

隨機驗證碼實例:

import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print (checkcode)

四、開源模塊

開源模塊為第三方模塊,是廣大python愛好者,開發者,為了實現某些功能封裝的模塊

1: 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檢查是否安裝成功

>>>importparamiko</pre>

等待更新!!!!!!!

來自為知筆記(Wiz)

</div>

 本文由用戶 122683636 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!