Day05 - Python 常用模組-技術 - 拾貝文庫網

文章推薦指數: 80 %
投票人數:10人

Day05 - Python 常用模組. ... 模組簡介. 模組就是一個儲存了Python 程式碼的檔案。

模組能定義函式,類和變數。

模組裡也能包含可執行的程式碼。

模組也是Python 物件, ... Day05-Python常用模組 標籤:ted   閱讀   height   call   contain   tor   group   ber   end   1.模組簡介 模組就是一個儲存了Python程式碼的檔案。

模組能定義函式,類和變數。

模組裡也能包含可執行的程式碼。

模組也是Python物件,具有隨機的名字屬性用來繫結或引用。

下例是個簡單的模組support.py 1defprint_func(par): 2print("Hello:",par) 3return 1)import語句 想使用Python原始檔,只需在另一個原始檔裡執行import語句,語法如下: importmodule1[,module2[,...moduleN] 當直譯器遇到import語句,如果模組在當前的搜尋路徑就會被匯入。

搜尋路徑是一個直譯器會先進行搜尋的所有目錄的列表。

如想要匯入模組support.py,需要把命令放在指令碼的頂端: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4#匯入模組 5importsupport 6 7#現在可以呼叫模組裡包含的函式了 8support.print_func("Zara") 輸出結果: 1Hello:Zara 一個模組只會被匯入一次,不管你執行了多少次import,這樣可以防止匯入模組被一遍又一遍地執行。

2)from…import語句 Python的from語句讓你從模組中匯入一個指定的部分到當前名稱空間中。

語法如下: frommodnameimportname1[,name2[,...nameN]] 例如,要匯入模組fib的fibonacci函式,使用如下語句: fromfibimportfibonacci 這個宣告不會把整個fib模組匯入到當前的名稱空間中,它只會將fib裡的fibonacci單個引入到執行這個宣告的模組的全域性符號表。

3)from…import*語句 把一個模組的所有內容全都匯入到當前的名稱空間也是可行的,只需使用如下宣告: frommodnameimport* 這提供了一個簡單的方法來匯入一個模組中的所有專案,然而這種宣告不該被過多地使用。

4)定位模組 當你匯入一個模組,Python解析器對模組位置的搜尋順序是: 當前目錄 如果不在當前目錄,Python則搜尋在shell變數PYTHONPATH下的每個目錄 如果都找不到,Python會察看預設路徑。

UNIX下,預設路徑一般為/usr/local/lib/python/。

模組搜尋路徑儲存在system模組的sys.path變數中。

變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。

5)PYTHONPATH變數 作為環境變數,PYTHONPATH由裝在一個列表裡的許多目錄組成。

PYTHONPATH的語法和shell變數的PATH一樣。

在Windows系統,典型的PYTHONPATH如下: 1>>>importsys 2>>>sys.path 3[‘‘,‘C:\\Python35\\Lib\\idlelib‘,‘C:\\Python35\\python35.zip‘,‘C:\\Python35\\DLLs‘,‘C:\\Python35\\lib‘,‘C:\\Python35‘,‘C:\\Python35\\lib\\site-packages‘] 在UNIX系統,典型的PYTHONPATH如下: setPYTHONPATH=/usr/local/lib/python 6)名稱空間和作用域 變數是擁有匹配物件的名字(識別符號)。

名稱空間是一個包含了變數名稱們(鍵)和它們各自相應的物件們(值)的字典。

一個Python表示式可以訪問區域性名稱空間和全域性名稱空間裡的變數。

如果一個區域性變數和一個全域性變數重名,則區域性變數會覆蓋全域性變數。

每個函式都有自己的名稱空間。

類的方法的作用域規則和通常函式的一樣。

Python會智慧地猜測一個變數是區域性的還是全域性的,它假設任何在函式內賦值的變數都是區域性的。

因此,如果要給全域性變數在一個函式裡賦值,必須使用global 語句。

globalVarName的表示式會告訴Python,VarName是一個全域性變數,這樣Python就不會在區域性名稱空間裡尋找這個變數了。

例如,我們在全域性名稱空間裡定義一個變數money,我們再在函式內給變數money賦值,然後Python會假定money是一個區域性變數。

然而,我們並沒有在訪問前宣告一個區域性變數money,結果就是會出現一個UnboundLocalError的錯誤。

取消global語句的註釋就能解決這個問題。

1>>>money=2000 2>>>defadd_money(): 3#想改正程式碼就取消以下注釋 4#globalmoney 5money+=1 6 7 8>>>print(money) 92000 10>>>add_money() 11Traceback(mostrecentcalllast): 12File"",line1,in 13add_money() 14File"",line4,inadd_money 15money+=1 16UnboundLocalError:localvariable‘money‘referencedbeforeassignment 17>>>print(money) 取消註釋: 1>>>money=2000 2>>>defadd_money(): 3globalmoney 4money+=1 5 6 7>>>print(money) 82000 9>>>add_money() 10>>>print(money) 112001 7)Python中的包 包是一個分層次的檔案目錄結構,它定義了一個由模組及子包,和子包下的子包等組成的Python的應用環境。

考慮一個在Phone目錄下的pots.py檔案。

這個檔案有如下原始碼: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4defPots(): 5print("I‘mPotsPhone") 同樣地,我們有另外兩個儲存了不同函式的檔案: Phone/Isdn.py含有函式Isdn() Phone/G3.py含有函式G3() 現在,在Phone目錄下建立file__init__.py: Phone/__init__.py 當你匯入Phone時,為了能夠使用所有函式,你需要在__init__.py裡使用顯式的匯入語句,如下: fromPotsimportPots fromIsdnimportIsdn fromG3importG3 當你把這些程式碼新增到__init__.py之後,匯入Phone包的時候這些類就全都是可用的了。

1#!/usr/bin/python 2#-*-coding:UTF-8-*- 3 4#匯入Phone包 5importPhone 6 7Phone.Pots() 8Phone.Isdn() 9Phone.G3() 輸出結果: 1I‘mPotsPhone 2I‘m3GPhone 3I‘mISDNPhone 如上,為了舉例,我們只在每個檔案裡放置了一個函式,但其實你可以放置許多函式。

也可以在這些檔案裡定義Python的類,然後為這些類建一個包。

8)dir()函式 dir()函式一個排好序的字串列表,內容是一個模組裡定義過的名字。

返回的列表容納了在一個模組裡定義的所有模組、變數和函式。

如下一個簡單的例項: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4#匯入內建math模組 5importmath 6 7dir(math) 以上例項輸出結果: 1[‘__doc__‘,‘__loader__‘,‘__name__‘,‘__package__‘,‘__spec__‘,‘acos‘,‘acosh‘,‘asin‘,‘asinh‘,‘atan‘,‘atan2‘,‘atanh‘,‘ceil‘,‘copysign‘,‘cos‘,‘cosh‘,‘degrees‘,‘e‘,‘erf‘,‘erfc‘,‘exp‘,‘expm1‘,‘fabs‘,‘factorial‘,‘floor‘,‘fmod‘,‘frexp‘,‘fsum‘,‘gamma‘,‘gcd‘,‘hypot‘,‘inf‘,‘isclose‘,‘isfinite‘,‘isinf‘,‘isnan‘,‘ldexp‘,‘lgamma‘,‘log‘,‘log10‘,‘log1p‘,‘log2‘,‘modf‘,‘nan‘,‘pi‘,‘pow‘,‘radians‘,‘sin‘,‘sinh‘,‘sqrt‘,‘tan‘,‘tanh‘,‘trunc‘] 在這裡,特殊字串變數__name__指向模組的名字,__file__指向該模組的匯入檔名。

9)globals()和locals()函式 根據呼叫地方的不同,globals()和locals()函式可被用來返回全域性和區域性名稱空間裡的名字。

如果在函式內部呼叫locals(),返回的是所有能在該函式裡訪問的命名。

1>>>locals() 2{‘__spec__‘:None,‘__name__‘:‘__main__‘,‘__doc__‘:None,‘__loader__‘:,‘__builtins__‘:,‘math‘:,‘__package__‘:None} 如果在函式內部呼叫globals(),返回的是所有在該函式裡能訪問的全域性名字。

1>>>globals() 2{‘__spec__‘:None,‘__name__‘:‘__main__‘,‘__doc__‘:None,‘__loader__‘:,‘__builtins__‘:,‘math‘:,‘__package__‘:None} 兩個函式的返回型別都是字典,所以名字能用keys()函式獲取。

10)reload()函式 當一個模組被匯入到一個指令碼,模組頂層部分的程式碼只會被執行一次。

因此,如果你想重新執行模組裡頂層部分的程式碼,可以用reload()函式。

該函式會重新匯入之前匯入過的模組。

語法如下: reload(module_name) 在這裡,module_name要直接放模組的名字,而不是一個字串形式。

比如想過載hello模組,如下: reload(hello) 2.常用模組 1)time&calendar &datetime Python 日期和時間 Python程式能用很多方式處理日期和時間,轉換日期格式是一個常見的功能。

Python提供了一個time和calendar模組可以用於格式化日期和時間。

時間間隔是以秒為單位的浮點小數。

每個時間戳都以自從1970年1月1日午夜(曆元)經過了多長時間來表示。

Python的time模組下有很多函式可以轉換常見日期格式。

如函式time.time()用於獲取當前時間戳,如下例項: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importtime#引入time模組 5 6ticks=time.time() 7print("當前時間戳為:",ticks) 輸出結果: 1當前時間戳為:1479129524.694309 時間戳單位最適於做日期運算。

但是1970年之前的日期就無法以此表示了。

太遙遠的日期也不行,UNIX和Windows只支援到2038年。

時間元組 很多Python函式用一個元組裝起來的9組數字處理時間: 序號欄位值 0 4位數年 2008 1 月 1到12 2 日 1到31 3 小時 0到23 4 分鐘 0到59 5 秒 0到61(60或61是閏秒) 6 一週的第幾日 0到6(0是週一) 7 一年的第幾日 1到366(儒略曆) 8 夏令時 -1,0,1,-1是決定是否為夏令時的旗幟 上述也就是struct_time元組。

這種結構具有如下屬性: 序號屬性值 0 tm_year 2008 1 tm_mon 1到12 2 tm_mday 1到31 3 tm_hour 0到23 4 tm_min 0到59 5 tm_sec 0到61(60或61是閏秒) 6 tm_wday 0到6(0是週一) 7 tm_yday 1到366(儒略曆) 8 tm_isdst -1,0,1,-1是決定是否為夏令時的旗幟 獲取當前時間 從返回浮點數的時間輟方式向時間元組轉換,只要將浮點數傳遞給如localtime之類的函式。

1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importtime 5 6localtime=time.localtime(time.time()) 7print("本地時間為:",localtime) 輸出結果: 1本地時間為:time.struct_time(tm_year=2016,tm_mon=11,tm_mday=14,tm_hour=21,tm_min=21,tm_sec=2,tm_wday=0,tm_yday=319,tm_isdst=0) 獲取格式化的時間 可以根據需求選取各種格式的時間,但是最簡單的獲取可讀時間模式的函式是asctime(): 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importtime 5 6localtime=time.asctime(time.localtime(time.time())) 7print("本地時間為:",localtime) 輸出結果: 1本地時間為:MonNov1421:24:392016 格式化日期 可以使用time模組的strftime方法來格式化日期 time.strftime(format[,t]) 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importtime 5 6#格式化成2016-03-2011:45:39形式 7print(time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())) 8 9#格式化成SatMar2822:24:242016形式 10print(time.strftime("%a%b%d%H:%M:%S%Y",time.localtime())) 11 12#將格式字串轉換為時間戳 13a="MonNov1421:31:452016" 14print(time.mktime(time.strptime(a,"%a%b%d%H:%M:%S%Y"))) 輸出結果: 2016-11-1421:32:21 MonNov1421:32:212016 1479130305.0 python中時間日期格式化符號: %y兩位數的年份表示(00-99) %Y四位數的年份表示(000-9999) %m月份(01-12) %d月內中的一天(0-31) %H24小時制小時數(0-23) %I12小時制小時數(01-12) %M分鐘數(00=59) %S秒(00-59) %a本地簡化星期名稱 %A本地完整星期名稱 %b本地簡化的月份名稱 %B本地完整的月份名稱 %c本地相應的日期表示和時間表示 %j年內的一天(001-366) %p本地A.M.或P.M.的等價符 %U一年中的星期數(00-53)星期天為星期的開始 %w星期(0-6),星期天為星期的開始 %W一年中的星期數(00-53)星期一為星期的開始 %x本地相應的日期表示 %X本地相應的時間表示 %Z當前時區的名稱 %%%號本身 獲取某月日曆 Calendar模組有很廣泛的方法用來處理年曆和月曆,例如列印某月的月曆: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importcalendar 5 6cal=calendar.month(2016,11) 7print("以下輸出2016年11月份的日曆:") 8print(cal) 輸出結果: 1以下輸出2016年11月份的日曆: 2November2016 3MoTuWeThFrSaSu 4123456 578910111213 614151617181920 721222324252627 8282930 time模組 time模組包含以下內建函式 time.altzone 返回格林威治西部的夏令時地區的偏移秒數(與UTC的時間差)。

如果該地區在格林威治東部會返回負值(如西歐,包括英國)。

對夏令時啟用地區才能使用 1>>>time.altzone 2-32400 time.asctime([tupletime]) 接受時間元組並返回一個可讀的形式為 ‘MonNov1421:45:062016‘ 的24個字元的字串 1>>>time.asctime(time.localtime()) 2‘MonNov1421:45:062016‘ time.clock() 用以浮點數計算的秒數返回當前的CPU時間。

用來衡量不同程式的耗時,比time.time()更有用 1>>>time.clock() 22.83648743983101e-06 time.ctime([secs])作用相當於asctime(localtime(secs)),未給引數相當於asctime() 1>>>time.ctime() 2‘MonNov1421:48:232016‘ time.gmtime([secs])接收時間輟(1970紀元後經過的浮點秒數)並返回格林威治天文時間下的時間元組t。

注:t.tm_isdst始終為0 1>>>time.gmtime() 2time.struct_time(tm_year=2016,tm_mon=11,tm_mday=14,tm_hour=13,tm_min=49,tm_sec=3,tm_wday=0,tm_yday=319,tm_isdst=0) time.localtime([secs])接收時間輟(1970紀元後經過的浮點秒數)並返回當地時間下的時間元組t(t.tm_isdst可取0或1,取決於當地當時是不是夏令時) 1>>>time.localtime() 2time.struct_time(tm_year=2016,tm_mon=11,tm_mday=14,tm_hour=21,tm_min=50,tm_sec=10,tm_wday=0,tm_yday=319,tm_isdst=0) time.mktime(tupletime)接受時間元組並返回時間輟(1970紀元後經過的浮點秒數) 1>>>time.mktime(time.localtime()) 21479131695.0 time.sleep(secs)推遲呼叫執行緒的執行,secs指秒數 1>>>print("Start:%s"%time.ctime()) 2Start:MonNov1421:59:152016 3>>>time.sleep(5) 4>>>print("End:%s"%time.ctime()) 5End:MonNov1421:59:202016 time.strftime(fmt[,tupletime])接收以時間元組,並返回以可讀字串表示的當地時間,格式由fmt決定 1>>>time.strftime("%b%d%Y%H:%M:%S",time.gmtime()) 2‘Nov14201614:01:42‘ time.strptime(str,fmt=‘%a%b%d%H:%M:%S%Y‘)根據fmt的格式把一個時間字串解析為時間元組 1>>>struct_time=time.strptime("30Nov16","%d%b%y") 2>>>print(struct_time) 3time.struct_time(tm_year=2016,tm_mon=11,tm_mday=30,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=335,tm_isdst=-1) time.time()返回當前時間的時間戳(1970紀元後經過的浮點秒數) 1>>>time.time() 21479132293.9487014 時間轉換 日曆(Calendar)模組 此模組的函式都是日曆相關的,例如列印某月的字元月曆。

星期一是預設的每週第一天,星期天是預設的最後一天。

更改設定需呼叫calendar.setfirstweekday()函式。

模組包含了以下內建函式: calendar.calendar(year,w=2,l=1,c=6)返回一個多行字串格式的year年年曆,3個月一行,間隔距離為c,每日寬度間隔為w字元,每行長度為21*W+18+2*C,l是每星期行數 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importcalendar 5 6print(calendar.calendar(2016,w=2,l=1,c=6)) 輸出結果: 12016 2 3JanuaryFebruaryMarch 4MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 51231234567123456 64567891089101112131478910111213 7111213141516171516171819202114151617181920 8181920212223242223242526272821222324252627 9252627282930312928293031 10 11AprilMayJune 12MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 13123112345 144567891023456786789101112 1511121314151617910111213141513141516171819 16181920212223241617181920212220212223242526 172526272829302324252627282927282930 183031 19 20JulyAugustSeptember 21MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 2212312345671234 2345678910891011121314567891011 24111213141516171516171819202112131415161718 25181920212223242223242526272819202122232425 26252627282930312930312627282930 27 28OctoberNovemberDecember 29MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 30121234561234 31345678978910111213567891011 32101112131415161415161718192012131415161718 33171819202122232122232425262719202122232425 3424252627282930282930262728293031 3531 calendar.firstweekday()返回當前每週起始日期的設定。

預設情況下,首次載入calendar模組時返回0,即星期一。

1>>>calendar.firstweekday() 20 calendar.isleap(year)是閏年返回True,否則為false。

1>>>calendar.isleap(2016) 2True calendar.leapdays(y1,y2)返回在Y1,Y2兩年之間的閏年總數。

1>>>calendar.leapdays(2000,2016) 24 calendar.month(year,month,w=2,l=1)返回一個多行字串格式的year年month月日曆,兩行標題,一週一行,每日寬度間隔為w字元,每行的長度為7*w+6,l是每星期的行數 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importcalendar 5 6print(calendar.month(2016,11,w=2,l=1)) 輸出結果: 1November2016 2MoTuWeThFrSaSu 3123456 478910111213 514151617181920 621222324252627 7282930 calendar.monthcalendar(year,month)返回一個整數的單層巢狀列表。

每個子列表裝載代表一個星期的整數,Year年month月外的日期都設為0,範圍內的日子都由該月第幾日表示,從1開始 >>>calendar.monthcalendar(2016,11) [[0,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,0,0,0,0]] calendar.monthrange(year,month)返回兩個整數。

第一個是該月的星期幾的日期碼,第二個是該月的日期碼,日從0(星期一)到6(星期日),月從1到12 1>>>calendar.monthrange(2016,11) 2(1,30) calendar.prcal(year,w=2,l=1,c=6)相當於print(calendar.calendar(year,w,l,c)) 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importcalendar 5 6print(calendar.prcal(2016,w=2,l=1,c=6)) 輸出結果: 2016 JanuaryFebruaryMarch MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 1231234567123456 4567891089101112131478910111213 111213141516171516171819202114151617181920 181920212223242223242526272821222324252627 252627282930312928293031 AprilMayJune MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 123112345 4567891023456786789101112 11121314151617910111213141513141516171819 181920212223241617181920212220212223242526 2526272829302324252627282927282930 3031 JulyAugustSeptember MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 12312345671234 45678910891011121314567891011 111213141516171516171819202112131415161718 181920212223242223242526272819202122232425 252627282930312930312627282930 OctoberNovemberDecember MoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSu 121234561234 345678978910111213567891011 101112131415161415161718192012131415161718 171819202122232122232425262719202122232425 24252627282930282930262728293031 31 None calendar.prmonth(year,month,w=2,l=1)相當於print(calendar.calendar(year,w,l,c)) 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importcalendar 5 6calendar.prmonth(2016,11,w=2,l=1) 輸出結果: 1November2016 2MoTuWeThFrSaSu 3123456 478910111213 514151617181920 621222324252627 7282930 calendar.setfirstweekday(weekday)設定每週的起始日期碼。

0(星期一)到6(星期日) 1>>>calendar.setfirstweekday(2) 2>>>calendar.firstweekday() 32 calendar.timegm(tupletime)和time.gmtime相反:接受一個時間元組形式,返回該時刻的時間輟(1970紀元後經過的浮點秒數) 1>>>calendar.timegm(time.localtime()) 21479164045 calendar.weekday(year,month,day)返回給定日期的日期碼。

0(星期一)到6(星期日)。

月份為1(一月)到12(12月) 1>>>calendar.weekday(2016,11,14) 20 datetime模組 datetime.datetime.now()返回當前時間 1>>>print(datetime.datetime.now()) 22016-11-1423:02:30.931429 datetime.date.fromtimestamp(time.time())時間戳直接轉成日期格式 1>>>print(datetime.date.fromtimestamp(time.time())) 22016-11-14 datetime.datetime.now()+datetime.timedelta(3))當前時間+3天 datetime.datetime.now()+datetime.timedelta(-3))當前時間-3天 datetime.datetime.now()+datetime.timedelta(hours=3))當前時間+3小時 datetime.datetime.now()+datetime.timedelta(minutes=30)當前時間+30分 1>>>print(datetime.datetime.now()) 22016-11-1423:05:03.731169 3>>>print(datetime.datetime.now()+datetime.timedelta(3))#當前時間+3天 42016-11-1723:05:03.743169 5>>>print(datetime.datetime.now()+datetime.timedelta(-3))#當前時間-3天 62016-11-1123:05:03.755170 7>>>print(datetime.datetime.now()+datetime.timedelta(hours=3))#當前時間+3小時 82016-11-1502:05:03.765171 9>>>print(datetime.datetime.now()+datetime.timedelta(minutes=30))#當前時間+30分 102016-11-1423:35:04.858233 replace(minute,hour) 時間替換 1>>>c_time=datetime.datetime.now() 2>>>print(c_time) 32016-11-1423:07:37.762979 4>>>print(c_time.replace(minute=3,hour=2)) 52016-11-1402:03:37.762979 2)random Python中的random模組用於生成隨機數 random.random() 用於生成一個0到1的隨機浮點數:0<=n<1.0 1>>>importrandom 2>>>random.random() 30.99107532292498801 random.uniform(a,b) 用於生成一個指定範圍內的隨機浮點數,兩個引數其中一個是上限,一個是下限。

如果a>b,則生成的隨機數n:a<=n<=b;如果a>>importrandom 2>>>random.uniform(10,20) 312.893035403821591 4>>>random.uniform(20,10) 515.344944314032574 random.randint(a,b) 用於生成一個指定範圍內的整數。

其中引數a是下限,引數b是上限,生成的隨機數n:a<=n<=b 1>>>importrandom 2>>>random.randint(12,20)#生成的隨機數n:12<=n<=20 316 4>>>random.randint(20,20)#結果永遠是20 520 6>>>random.randint(20,10)#該語句是錯誤的,下限必須小於上限 7Traceback(mostrecentcalllast): 8File"",line1,in 9File"/usr/lib64/python2.6/random.py",line228,inrandint 10returnself.randrange(a,b+1) 11File"/usr/lib64/python2.6/random.py",line204,inrandrange 12raiseValueError,"emptyrangeforrandrange()(%d,%d,%d)"%(istart,istop,width) 13ValueError:emptyrangeforrandrange()(20,11,-9) random.randrange([start],stop[,step]) 從指定範圍內,按指定基數遞增的集合中獲取一個隨機數。

1>>>importrandom 2>>>random.randrange(10,100,2) 380 結果相當於從[10,12,14,16,...96,98]序列中獲取一個隨機數。

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

random.choice(sequence) 從序列中獲取一個隨機元素,引數sequence表示一個有序型別。

這裡要說明 一下:sequence在python不是一種特定的型別,而是泛指一系列的型別。

list,tuple,字串都屬於sequence。

1>>>importrandom 2>>>random.choice("學習Python") 3‘\xe4‘ 4>>>random.choice(["JGood","is","a","handsome","boy"]) 5‘boy‘ 6>>>random.choice(("Tuple","List","Dict")) 7‘List‘ random.shuffle(x[,random]) 用於將一個列表中的元素打亂 1>>>importrandom 2>>>p=["Python","is","powerful","simple","andsoon..."] 3>>>random.shuffle(p) 4>>>p 5[‘is‘,‘Python‘,‘andsoon...‘,‘powerful‘,‘simple‘] random.sample(sequence,k) 從指定序列中隨機獲取指定長度的片,sample函式不會修改原有序列 1>>>importrandom 2>>>list=[1,2,3,4,5,6,7,8,9,10] 3>>>slice=random.sample(list,5) 4>>>slice 5[8,6,9,3,7] 6>>>list 7[1,2,3,4,5,6,7,8,9,10] 多個字元中選取特定數量的字元 1>>>importrandom 2>>>random.sample(‘abcdefghij‘,3) 3[‘i‘,‘c‘,‘b‘] random.sample驗證碼應用 方式一: 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importrandom 5importstring 6 7str_source=string.ascii_letters+string.digits 8code=random.sample(str_source,6) 9foriincode: 10print(i,end="") 輸出結果: 10sHxSZ 方式二: 1#!/usr/bin/envpython 2#-*-coding:utf-8-*- 3 4importrandom 5 6check_code="" 7foriinrange(6): 8current=random.randrange(0,6) 9ifcurrent!=i: 10temp=chr(random.randint(65,90)) 11else: 12temp=random.randint(0,9) 13check_code+=str(temp) 14print(check_code) 輸出結果: 1HY5YNN 3)os os.name 輸出字串指示正在使用的平臺。

如果是window則用‘nt‘表示: 1>>>importos 2>>>os.name 3‘nt‘ 對於Linux/Unix使用者,它是‘posix‘: 1>>>importos 2>>>os.name 3‘posix‘ os.getcwd() 獲取當前工作目錄,即當前python指令碼工作的目錄路徑 1>>>importos 2>>>os.getcwd() 3‘/home/test‘ os.chdir("dirname") 改變當前指令碼工作目錄,相當於shell下cd 1>>>importos 2>>>os.getcwd() 3‘/home/test‘ 4>>>os.chdir("Python35") 5>>>os.getcwd() 6‘/usr/local/python35‘ os.curdir 返回當前目錄:(‘.‘) 1>>>importos 2>>>os.curdir 3‘.‘ os.pardir 獲取當前目錄的父目錄字串名:(‘..‘) 1>>>importos 2>>>os.pardir 3‘..‘ os.makedirs(‘dirname1/dirname2‘) 可生成多層遞迴目錄 1>>>importos 2>>>os.getcwd() 3‘/home/test‘ 4>>>os.makedirs(‘test1/test2‘) 5>>>os.chdir(‘test1‘) 6>>>os.getcwd() 7‘/home/test/test1‘ 8>>>os.chdir(‘test2‘) 9>>>os.getcwd() 10‘/home/test/test1/test2‘ os.removedirs(‘dirname1‘) 若目錄為空,則刪除,並遞迴到上一級目錄,如若也為空,則刪除,依此類推 1>>>importos 2>>>os.getcwd() 3‘/home/test/test1/test2‘ 4>>>os.chdir(‘..‘) 5>>>os.getcwd() 6‘/home/test/test1‘ 7>>>os.removedirs(‘test2‘) 8>>>os.getcwd() 9‘/home/test/test1‘ 10>>>os.chdir(‘test2‘) 11Traceback(mostrecentcalllast): 12File"",line1,in 13OSError:[Errno2]Nosuchfileordirectory:‘test2‘ os.mkdir(‘dirname‘) 生成單級目錄,相當於shell中mkdirdirname 1>>>importos 2>>>os.getcwd() 3‘/home/test‘ 4>>>os.chdir(‘test1‘) 5>>>os.getcwd() 6‘/home/test/test1‘ 7>>>os.listdir(‘.‘) 8[] 9>>>os.mkdir(‘test2‘) 10>>>os.listdir(‘.‘) 11[‘test2‘] os.listdir(‘dirname‘) 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印 1>>>importos 2>>>os.listdir(‘.‘) 3[‘.zshrc‘,‘.subversion‘,‘.dbshell‘,‘.mozilla‘,‘.bash_logout‘,‘.gnome2‘,‘.bash_history‘,‘.bashrc‘,‘test1‘,‘.viminfo‘,‘.emacs‘,‘.bash_profile‘] os.rmdir(‘dirname‘) 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdirdirname 1>>>importos 2>>>os.getcwd() 3‘/home/test/test1‘ 4>>>os.listdir(‘.‘) 5[‘test2‘] 6>>>os.rmdir(‘test2‘) 7>>>os.listdir(‘.‘) 8[] os.remove() 刪除一個檔案 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test.log‘] 4>>>os.remove(‘test.log‘) 5>>>os.listdir(‘.‘) 6[] os.rename("oldname","newname") 重新命名檔案/目錄 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test.log‘] 4>>>os.rename(‘test.log‘,‘hello.txt‘) 5>>>os.listdir(‘.‘) 6[‘hello.txt‘] os.stat(‘path/filename‘) 獲取檔案/目錄資訊 1>>>importos 2>>>os.listdir(‘.‘) 3[‘hello.txt‘] 4>>>os.stat(‘hello.txt‘) 5posix.stat_result(st_mode=33188,st_ino=2629852,st_dev=64768L,st_nlink=1,st_uid=505,st_gid=301,st_size=0,st_atime=1478588652,st_mtime=1478588652,st_ctime=1478588686) os.sep 輸出作業系統特定的路徑分隔符 win下為"\\" 1>>>importos 2>>>os.sep 3‘\\‘ Linux下為"/" >>>importos >>>os.sep ‘/‘ os.linesep 輸出當前平臺使用的行終止符 win下為"\r\n" 1>>>importos 2>>>os.linesep 3‘\r\n‘ Linux下為"\n" 1>>>importos 2>>>os.linesep 3‘\n‘ os.pathsep 輸出用於分割檔案路徑的字串 win下為‘;‘ 1>>>importos 2>>>os.pathsep 3‘;‘ Linux下為‘:‘ 1>>>importos 2>>>os.pathsep 3‘:‘ os.system("bashcommand") 執行shell命令,直接顯示 1>>>importos 2>>>os.system(‘date‘) 3TueNov815:15:26CST2016 40 os.environ 獲取系統環境變數 1>>>importos 2>>>os.environ 3environ({‘OS‘:‘Windows_NT‘,‘PROCESSOR_REVISION‘:‘1706‘,‘HOMEPATH‘:‘\\Users\\test‘,‘APPDATA‘:‘C:\\Users\\test\\AppData\\Roaming‘,‘PUBLIC‘:‘C:\\Users\\Public‘,‘PROGRAMFILES(X86)‘:‘C:\\ProgramFiles(x86)‘,‘COMPUTERNAME‘:‘TEST-PC‘,‘SYSTEMDRIVE‘:‘C:‘,‘LOCALAPPDATA‘:‘C:\\Users\\test\\AppData\\Local‘,‘COMMONPROGRAMFILES‘:‘C:\\ProgramFiles\\CommonFiles‘,‘SESSIONNAME‘:‘Console‘,‘FP_NO_HOST_CHECK‘:‘NO‘,‘PROCESSOR_IDENTIFIER‘:‘Intel64Family6Model23Stepping6,GenuineIntel‘,‘PROGRAMDATA‘:‘C:\\ProgramData‘,‘USERNAME‘:‘test‘,‘PROGRAMFILES‘:‘C:\\ProgramFiles‘,‘CATALINA_HOME‘:‘D:\\apache-tomcat-6.0.45‘,‘NUMBER_OF_PROCESSORS‘:‘2‘,‘TMP‘:‘C:\\Users\\test\\AppData\\Local\\Temp‘,‘PATHEXT‘:‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW‘,‘PROMPT‘:‘$P$G‘,‘COMMONPROGRAMFILES(X86)‘:‘C:\\ProgramFiles(x86)\\CommonFiles‘,‘COMSPEC‘:‘C:\\Windows\\system32\\cmd.exe‘,‘PROGRAMW6432‘:‘C:\\ProgramFiles‘,‘SYSTEMROOT‘:‘C:\\Windows‘,‘PATH‘:‘D:\\Python35\\Scripts\\;D:\\Python35\\;D:\\oracle\\product\\10.2.0\\client_1\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;D:\\ProgramFiles\\TortoiseSVN\\bin;C:\\Redis\\;C:\\Java\\jdk1.6\\bin;D:\\MongoDB\\Server\\3.2\\bin‘,‘TEMP‘:‘C:\\Users\\test\\AppData\\Local\\Temp‘,‘USERDOMAIN‘:‘test-PC‘,‘COMMONPROGRAMW6432‘:‘C:\\ProgramFiles\\CommonFiles‘,‘PROCESSOR_LEVEL‘:‘6‘,‘PSMODULEPATH‘:‘C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\;C:\\ProgramFiles\\Intel\\‘,‘USERPROFILE‘:‘C:\\Users\\test‘,‘ALLUSERSPROFILE‘:‘C:\\ProgramData‘,‘LOGONSERVER‘:‘\\\\TEST-PC‘,‘WINDIR‘:‘C:\\Windows‘,‘JAVA_HOME‘:‘C:\\Java\\jdk1.6‘,‘HOMEDRIVE‘:‘C:‘,‘PROCESSOR_ARCHITECTURE‘:‘AMD64‘}) os.path.abspath(path) 返回path規範化的絕對路徑 1>>>importos 2>>>os.path.abspath(‘test1‘) 3‘/home/test/test1/test1‘ os.path.split(path) 將path分割成目錄和檔名二元組返回 1>>>importos 2>>>os.path.split(‘/home/test‘) 3(‘/home‘,‘test‘) os.path.dirname(path) 返回path的目錄,其實就是os.path.split(path)的第一個元素 1>>>importos 2>>>os.path.dirname(‘/home/test‘) 3‘/home‘ os.path.basename(path) 返回path最後的檔名,如果path以/或\結尾,那麼就會返回空值,即os.path.split(path)的第二個元素 1>>>importos 2>>>os.path.basename(‘home/test‘) 3‘test‘ 4>>>os.path.basename(‘home/test/‘) 5‘‘ os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 1>>>importos 2>>>os.getcwd() 3‘/home/test/test1‘ 4>>>os.listdir(‘.‘) 5[‘test2‘,‘hello.txt‘] 6>>>os.path.exists(‘test1‘) 7False 8>>>os.path.exists(‘test2‘) 9True os.path.isabs(path) 如果path是絕對路徑,返回True 1>>>importos 2>>>os.path.isabs(‘/home/test/test1‘) 3True 4>>>os.path.isabs(‘test1‘) 5False os.path.isfile(path) 如果path是一個存在的檔案,返回True。

否則返回False 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test2‘,‘hello.txt‘] 4>>>os.path.isfile(‘hello.txt‘) 5True 6>>>os.path.isfile(‘test.log‘) 7False os.path.isdir(path) 如果path是一個存在的目錄,則返回True。

否則返回False 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test2‘,‘hello.txt‘] 4>>>os.path.isdir(‘test2‘) 5True 6>>>os.path.isdir(‘hello.txt‘) 7False os.path.join(path1[,path2[,...]]) 將多個路徑組合後返回,第一個絕對路徑之前的引數將被忽略 1>>>importos 2>>>os.path.join(‘test1‘,‘test2‘,‘test‘) 3‘test1/test2/test‘ 4>>>os.path.join(‘/home/test/test1‘,‘test2‘,‘test‘) 5‘/home/test/test1/test2/test‘ 6>>>os.path.join(‘test1‘,‘/home/test/test1/test2‘,‘test‘) 7‘/home/test/test1/test2/test‘ os.path.getatime(path) 返回path所指向的檔案或者目錄的最後存取時間 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test2‘,‘hello.txt‘] 4>>>os.path.getatime(‘hello.txt‘) 51478588652.6452732 os.path.getmtime(path) 返回path所指向的檔案或者目錄的最後修改時間 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test2‘,‘hello.txt‘] 4>>>os.path.getmtime(‘hello.txt‘) 51478588652.6452732 os.path.split(path) 返回一個路徑的目錄名和檔名 1>>>importos 2>>>os.path.split(‘/home/test/test1/hello.txt‘) 3(‘/home/test/test1‘,‘hello.txt‘) os.path.getsize(name) 獲得檔案大小 1>>>importos 2>>>os.listdir(‘.‘) 3[‘test2‘,‘hello.txt‘] 4>>>os.path.getsize(‘hello.txt‘) 512 6>>>os.path.getsize(‘test2‘) 74096 4)sys sys.argv 在外部向程式內部傳遞引數,以list的形式返回引數列表 1>>>importsys 2>>>sys.argv 3[‘‘] 示例: 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importsys 5 6print(sys.argv[0]) 7print(sys.argv[1]) 執行結果: 1$pythonsys.pyargv1 2sys.py 3argv1 sys.exit(n) 執行到主程式末尾,直譯器自動退出,但是如果需要中途退出程式,可以呼叫sys.exit函式,帶有一個可選的整數引數返回給呼叫它的程式,表示你可以在主程式中捕獲對sys.exit的呼叫。

(0是正常退出,其他為異常) 1>>>importsys 2>>>sys.exit(1) 3[[email protected]~]$echo$? 41 sys.version 獲取Python解釋程式的版本資訊 1>>>importsys 2>>>sys.version 3‘3.5.2(v3.5.2:4def2a2901a5,Jun252016,22:18:55)[MSCv.190064bit(AMD64)]‘ sys.maxint 獲取最大的int值 1>>>importsys 2>>>sys.maxint 39223372036854775807 sys.path 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值 >>>importsys >>>sys.path [‘‘,‘/usr/local/python35/lib/python35.zip‘,‘/usr/local/python35/lib/python3.5‘,‘/usr/local/python35/lib/python3.5/plat-linux‘,‘/usr/local/python35/lib/python3.5/lib-dynload‘,‘/usr/local/python35/lib/python3.5/site-packages‘] sys.platform 返回作業系統平臺名稱 1>>>importsys 2>>>sys.platform 3‘linux‘ sys.modules sys.modules是一個全域性字典,該字典是python啟動後就載入在記憶體中。

每當程式設計師匯入新的模組,sys.modules將自動記錄該模組。

當第二次再匯入該模組時,python會直接到字典中查詢,從而加快了程式執行的速度。

它擁有字典所擁有的一切方法。

1>>>importsys 2>>>sys.modules 3{‘_sitebuiltins‘:,‘encodings.aliases‘:,‘errno‘:,‘_collections_abc‘:,‘atexit‘:,‘posixpath‘:,‘_codecs‘:,‘__main__‘:,‘builtins‘:,‘io‘:,‘genericpath‘:,‘site‘:,‘_io‘:,‘_frozen_importlib_external‘:,‘_stat‘:,‘_thread‘:,‘encodings.latin_1‘:,‘encodings.utf_8‘:,‘_imp‘:,‘os‘:,‘_weakref‘:,‘zipimport‘:,‘posix‘:,‘stat‘:,‘os.path‘:,‘codecs‘:,‘abc‘:,‘_frozen_importlib‘:,‘encodings‘:,‘marshal‘:,‘_signal‘:,‘_weakrefset‘:,‘sys‘:,‘sysconfig‘:,‘_warnings‘:,‘_sysconfigdata‘:} sys.stdout.write(‘please:‘) 1>>>importsys 2>>>sys.stdout.write(‘please:‘) 3please:7 val = sys.stdin.readline()[:-1] 1>>>importsys 2>>>val=sys.stdin.readline()[:-1] 3HelloWorld 4>>>val 5‘HelloWorld‘ 5)shutil 高階的對檔案、資料夾、壓縮包處理的模組  copyfile(src,dst)  從源src複製到dst中去。

當然前提是目標地址是具備可寫許可權。

丟擲的異常資訊為IOException.如果當前的dst已存在的話就會被覆蓋掉  copymode(src,dst)  只是會複製其許可權其他的東西是不會被複制的  copystat(src,dst)  複製許可權、最後訪問時間、最後修改時間  copy(src,dst)     複製一個檔案到一個檔案或一個目錄  copy2(src,dst)   在copy上的基礎上再複製檔案最後訪問時間與修改時間也複製過來了,類似於cp–p的東西  copy2(src,dst)   如果兩個位置的檔案系統是一樣的話相當於是rename操作,只是改名;如果是不在相同的檔案系統的話就是做move操作  copytree(olddir,newdir,True/Flase)  把olddir拷貝一份newdir,如果第3個引數是True,則複製目錄時將保持資料夾下的符號連線,如果第3個引數是False,則將在複製的目錄下生成物理副本來替代符號連線 shutil.copyfileobj(fsrc,fdst[,length]) 將檔案內容拷貝到另一個檔案中,可以部分內容  ViewCode shutil.copyfile(src,dst)拷貝檔案  ViewCode shutil.copymode(src,dst)僅拷貝許可權。

內容、組、使用者均不變  ViewCode shutil.copystat(src,dst)拷貝狀態的資訊,包括:modebits,atime,mtime,flags  ViewCode shutil.copy(src,dst)拷貝檔案和許可權  ViewCode shutil.copy2(src,dst)拷貝檔案和狀態資訊  ViewCode shutil.ignore_patterns(*patterns)shutil.copytree(src,dst,symlinks=False,ignore=None)遞迴的去拷貝檔案 例如:copytree(source,destination,ignore=ignore_patterns(‘*.pyc‘,‘tmp*‘))  ViewCode shutil.rmtree(path[,ignore_errors[,onerror]])遞迴的去刪除檔案  ViewCode shutil.move(src,dst)遞迴的去移動檔案  ViewCode shutil.make_archive(base_name,format,...) 建立壓縮包並返回檔案路徑,例如:zip、tar base_name:壓縮包的檔名,也可以是壓縮包的路徑。

只是檔名時,則儲存至當前目錄,否則儲存至指定路徑,如:www            =>儲存至當前路徑如:/Users/wupeiqi/www=>儲存至/Users/wupeiqi/ format: 壓縮包種類,“zip”,“tar”,“bztar”,“gztar” root_dir: 要壓縮的資料夾路徑(預設當前目錄) owner: 使用者,預設當前使用者 group: 組,預設當前組 logger: 用於記錄日誌,通常是logging.Logger物件 1 2 3 4 5 6 7 8 9 #將/Users/wupeiqi/Downloads/test下的檔案打包放置當前程式目錄   import shutil ret = shutil.make_archive("wwwwwwwwww", ‘gztar‘,root_dir=‘/Users/wupeiqi/Downloads/test‘)     #將/Users/wupeiqi/Downloads/test下的檔案打包放置/Users/wupeiqi/目錄 import shutil ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", ‘gztar‘,root_dir=‘/Users/wupeiqi/Downloads/test‘)  ViewCode shutil對壓縮包的處理是呼叫ZipFile和TarFile兩個模組來進行的,詳細:  zipfile壓縮解壓  tarfile壓縮解壓  ZipFile  TarFile    6)json&pickle 用於序列化的兩個模組 json,用於字串和python資料型別間進行轉換 pickle,用於python特有的型別和python資料型別間進行轉換 Json模組提供了四個功能:dumps、dump、loads、load pickle模組提供了四個功能:dumps、dump、loads、load   JSON模組 JSON(JavaScriptObjectNotation)是一種輕量級的資料交換格式,易於閱讀和編寫,同時也易於機器解析和生成,它基於 JavaScriptProgrammingLanguage, StandardECMA-2623rdEdition-December1999 的一個子集。

JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C,C++,C#,Java,JavaScript,Perl,Python等)。

這些特性使JSON成為理想的資料交換語言。

Python3中可以使用json模組來對JSON資料進行編解碼,它包含了兩個函式: json.dumps():對資料進行編碼 json.loads():對資料進行解碼 json.dumps與json.loads例項 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importjson 5#將python的基礎資料型別轉化成字串 6dic={"k1":"v1","k2":"v2"} 7print("Python原始資料:",repr(dic),type(dic)) 8result=json.dumps(dic)#將字典型別轉換為字串型別 9print("JSON物件:",result,type(result)) 輸出結果: 1Python原始資料:{‘k2‘:‘v2‘,‘k1‘:‘v1‘} 2JSON物件:{"k2":"v2","k1":"v1"} JSON編碼的字串轉換回Python資料結構 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importjson 5#將python的基礎資料型別轉化成字串 6dic={"k1":"v1","k2":"v2"} 7print("Python原始資料:",repr(dic),type(dic)) 8result=json.dumps(dic)#將字典型別轉換為字串型別 9print("JSON物件:",result,type(result)) 10 11#將python字串型別轉化為python基本資料型別 12result=json.loads(result) 13print("result[‘k1‘]:",result[‘k1‘]) 14print("result[‘k2‘]:",result[‘k2‘]) 輸出結果: 1Python原始資料:{‘k1‘:‘v1‘,‘k2‘:‘v2‘} 2JSON物件:{"k1":"v1","k2":"v2"} 3result[‘k1‘]:v1 4result[‘k2‘]:v2 如果要處理的是檔案而不是字串,可以使用 json.dump() 和 json.load() 來編碼和解碼JSON資料 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importjson 5 6data={ 7‘name‘:"James", 8‘age‘:24, 9‘job‘:"IT" 10} 11#寫入json資料 12withopen(‘db.json‘,‘w‘,encoding="UTF-8")asf: 13json.dump(data,f) 14 15#讀取json資料 16withopen(‘db.json‘,‘r‘,encoding="UTF-8")asf: 17res=json.load(f) 18print(res,type(res)) 輸出結果: 1{‘name‘:‘James‘,‘age‘:24,‘job‘:‘IT‘} PICKLE模組 pickle模組使用的資料格式是python專用的,並且不同版本不向後相容,同時也不能被其他語言說識別。

要和其他語言互動,可以使用內建的json包使用pickle模組你可以把Python物件直接儲存到檔案,而不需要把他們轉化為字串,也不用底層的檔案訪問操作把它們寫入到一個二進位制檔案裡。

pickle模組會建立一個python語言專用的二進位制格式,基本上不用考慮任何檔案細節,它會幫你乾淨利落地完成讀寫獨享操作,唯一需要的只是一個合法的檔案控制代碼。

python3中可以使用pickle模組,對資料進行編解碼。

它包含兩個函式: pickle.dumps() pickle.loads() pickle.dumps與pickle.loads例項 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importpickle 5 6data={ 7‘name‘:"James", 8‘age‘:24, 9‘job‘:"IT" 10} 11 12print("原始python物件:",repr(data)) 13r=pickle.dumps(data) 14print("pickle轉換後的物件:",r) 15res=pickle.loads(r) 16print("res[‘name‘]:",res[‘name‘]) 17print("res[‘age‘]:",res[‘age‘]) 18print("res[‘job‘]:",res[‘job‘]) 輸出結果: 1原始python物件:{‘name‘:‘James‘,‘job‘:‘IT‘,‘age‘:24} 2pickle轉換後的物件:b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x05\x00\x00\x00Jamesq\x02X\x03\x00\x00\x00jobq\x03X\x02\x00\x00\x00ITq\x04X\x03\x00\x00\x00ageq\x05K\x18u.‘ 3res[‘name‘]:James 4res[‘age‘]:24 5res[‘job‘]:IT 如果要處理的是檔案而不是字串,你可以使用 pickle.dump() 和 pickle.load() 來編碼和解碼JSON資料 1#!/usr/bin/envpython 2#-*-coding:UTF-8-*- 3 4importpickle 5 6data={ 7‘name‘:"James", 8‘age‘:24, 9‘job‘:"IT" 10} 11#寫入資料,要以wb格式寫入 12pickle.dump(data,open(‘db‘,‘wb‘)) 13#讀取資料,要以rb格式讀取 14f=open(‘db‘,‘rb‘) 15res=pickle.load(f) 16print(res) 輸出結果: 1{‘name‘:‘James‘,‘age‘:24,‘job‘:‘IT‘} pickle和json的區別: json適合跨語言,對於python而言僅適用於Python基本資料型別 pickle僅適用於python,pickle適用於python所有資料型別的序列化 pickle寫入和讀取檔案時,用的是‘b’模式,而json沒有。

json只能序列化最基本的資料型別,而pickle可以序列化所有的資料型別,包括類,函式都可以序列化。

7)shelve 8)xml處理 9)yaml處理 10)configparser 11)hashlib 12)subprocess 13)logging 14)re正規表示式   本節作業 開發一個簡單的python計算器 實現加減乘除及拓號優先順序解析 使用者輸入 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))等類似公式後,必須自己解析裡面的(),+,-,*,/符號和公式(不能呼叫eval等類似功能偷懶實現),運算後得出結果,結果必須與真實的計算器所得出的結果一致   hint: re.search(r‘\([^()]+\)‘,s).group() ‘(-40/5)‘Day05-Python常用模組標籤:ted   閱讀   height   call   contain   tor   group   ber   end   原文地址:http://www.cnblogs.com/RUReady/p/6039800.html 上一篇:Mysql入門mysql查詢資料庫中的儲存過程與函式的語句下一篇:MYSQL資料庫MySQL資料庫備份以及常用備份工具集合 搜索 最新發布: win11alt+tab切換不了介面什麼原因?win11alt+tab切換不了介面的解決方法 win11按w彈出小元件怎麼關閉?win11按w彈出小元件的關閉方法 win11bios怎麼進入?win11bios的進入方法 Win11如何修復音訊錄製?Win11修復音訊錄製的方法 Win11關機後自動重啟怎麼辦?Win11關機後自動重啟的解決方法 應用商店什麼軟體都無法下載怎麼辦?應用商店什麼軟體都無法下載的解決方法 黑屏如何重灌系統Win11? 開機時顯示準備配置windows請勿關閉計算機怎麼解決? win11C盤莫名其妙滿了?win11C盤滿了的清理方法 win11C盤怎麼擴大?win11C盤分割槽小了擴大的方法 win11net3.5怎麼安裝?win11系統net3.5安裝教程 win11拖動檔案閃退怎麼辦?win11拖動檔案閃退的解決方法 Win11如何開啟工作列管理器?Win11開啟工作列管理器的多種方法 機械師筆記本如何重灌Win11系統?機械師筆記本一鍵重灌Win11圖文教程 Win11怎麼開啟DirectX診斷工具?Win11開啟DX診斷工具的方法



請為這篇文章評分?