python學習之路day05

本節大綱:html

  1. 模塊介紹
  2. time &datetime模塊
  3. random
  4. os
  5. sys
  6. shutil
  7. json & picle
  8. shelve
  9. xml處理
  10. yaml處理
  11. configparser
  12. hashlib
  13. subprocess
  14. logging模塊
  15. re正則表達式

1.模塊node

1.1定義:用來從邏輯上組織python代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的python文件(文件名:test.py)python

注:包的定語:本質就是一個目錄(必須帶一個_init_.py文件)。用來從邏輯上組織模塊。git

1.2.導入方法:正則表達式

import module_test算法

import module_test,module_test1,module_test2shell

from module_test  import *(這個方法可忽略)json

from module_test  import m1,m2,m3bash

from module_test import logger as  logger_alex數據結構

1.3impot本質(路徑搜索和搜索路徑)

導入模塊的本質就是把python文件解釋一遍

import module_test---->imodule_test。py------>imodule_test.py的路徑---->sys.path(搜索路徑)

導入包的本質就是執行該包下的_init_.py文件

1.4導入優化

rom module_test  import m1

1.5模塊的分類

a.標準庫

b.開源模塊

c.自定義模塊

標準庫:

2.time與datetime

4 import time 5 
7 # print(time.clock()) #返回處理器時間,3.3開始已廢棄 , 改爲了time.process_time()測量處理器運算時間,不包括sleep時間,不穩定,mac上測不出來
8 # print(time.altzone) #返回與utc時間的時間差,以秒計算\
9 # print(time.asctime()) #返回時間格式"Fri Aug 19 11:14:16 2016",
10 # print(time.localtime()) #返回本地時間 的struct time對象格式
11 # print(time.gmtime(time.time()-800000)) #返回utc時間的struc時間對象格式
13 # print(time.asctime(time.localtime())) #返回時間格式"Fri Aug 19 11:14:16 2016",
14 #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上
18 # 日期字符串 轉成 時間戳
19 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #將 日期字符串 轉成 struct時間對象格式
20 # print(string_2_struct)
21 # #
22 # struct_2_stamp = time.mktime(string_2_struct) #將struct時間對象轉成時間戳
23 # print(struct_2_stamp)
27 #將時間戳轉爲字符串格式
28 # print(time.gmtime(time.time()-86640)) #將utc時間戳轉換成struct_time格式
29 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #將utc struct_time格式轉成指定的字符串格式

3.random模塊

 

3.1隨機數
import random
print random.random()
print random.randint( 1 , 2 )
print random.randrange( 1 , 10 )
3.2生成隨機碼
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
4.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所指向的文件或者目錄的最後修改時間
5.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 ]
6.shutil 模塊
直接參考 http://www.cnblogs.com/wupeiqi/articles/4963027.html 
7.json & pickle 模塊

用於序列化的兩個模塊

  • json,用於字符串 和 python數據類型間進行轉換
  • pickle,用於python特有的類型 和 python的數據類型間進行轉換

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

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

8.xml處理模塊

xml是實現不一樣語言或程序之間進行數據交換的協議,跟json差很少,但json使用起來更簡單,不過,古時候,在json還沒誕生的黑暗年代,你們只能選擇用xml呀,至今不少傳統公司如金融行業的不少系統的接口還主要是xml。

xml的格式以下,就是經過<>節點來區別數據結構的:

import xml.etree.ElementTree as ET
 
tree = ET.parse( "xmltest.xml" )
root = tree.getroot()
print (root.tag)
 
#遍歷xml文檔
for child in root:
     print (child.tag, child.attrib)
     for i in child:
         print (i.tag,i.text)
 
#只遍歷year 節點
for node in root. iter ( 'year' ):
     print (node.tag,node.text)
修改XML
import xml.etree.ElementTree as ET
 
tree = ET.parse( "xmltest.xml" )
root = tree.getroot()
#修改
for node in root. iter ( 'year' ):
     new_year = int (node.text) + 1
     node.text = str (new_year)
     node. set ( "updated" , "yes" )
 
tree.write( "xmltest.xml" )
 
#刪除node
for country in root.findall( 'country' ):
    rank = int (country.find( 'rank' ).text)
    if rank > 50 :
      root.remove(country)
tree.write( 'output.xml' )

9.hashlib模塊  

用於加密相關的操做,3.x裏代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib
 
m = hashlib.md5()
m.update(b "Hello" )
m.update(b "It's me" )
print (m.digest())
m.update(b "It's been a long time since last time we ..." )
 
print (m.digest()) #2進制格式hash
print ( len (m.hexdigest())) #16進制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown
     """ Return the digest value as a string of binary data. """
     pass
 
def hexdigest(self, *args, **kwargs): # real signature unknown
     """ Return the digest value as a string of hexadecimal digits. """
     pass
 
'''
import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5()
hash .update( 'admin' )
print ( hash .hexdigest())
# ######## sha1 ########
hash = hashlib.sha1()
hash .update( 'admin' )
print ( hash .hexdigest())
# ######## sha256 ########
hash = hashlib.sha256()
hash .update( 'admin' )
print ( hash .hexdigest())
 
# ######## sha384 ########
hash = hashlib.sha384()
hash .update( 'admin' )
print ( hash .hexdigest())
# ######## sha512 ########
hash = hashlib.sha512()
hash .update( 'admin' )
print ( hash .hexdigest())
注:更多關於md5,sha1,sha256等介紹的文章看這裏https://www.tbs-certificates.co.uk/FAQ/en/sha256.html 
10.re模塊
'.'     默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
'^'     匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r "^a" , "\nabc\neee" ,flags = re.MULTILINE)
'$'     匹配字符結尾,或e.search( "foo$" , "bfoo\nsdfsf" ,flags = re.MULTILINE).group()也能夠
'*'     匹配 * 號前的字符 0 次或屢次,re.findall( "ab*" , "cabb3abcbbac" )  結果爲[ 'abb' , 'ab' , 'a' ]
'+'     匹配前一個字符 1 次或屢次,re.findall( "ab+" , "ab+cd+abb+bba" ) 結果[ 'ab' , 'abb' ]
'?'     匹配前一個字符 1 次或 0
'{m}'   匹配前一個字符m次
'{n,m}' 匹配前一個字符n到m次,re.findall( "ab{1,3}" , "abb abc abbcbbb" ) 結果 'abb' , 'ab' , 'abb' ]
'|'     匹配|左或|右的字符,re.search( "abc|ABC" , "ABCBabcCD" ).group() 結果 'ABC'
'(...)' 分組匹配,re.search( "(abc){2}a(123|456)c" , "abcabca456c" ).group() 結果 abcabca456c
 
 
'\A'    只從字符開頭匹配,re.search( "\Aabc" , "alexabc" ) 是匹配不到的
'\Z'    匹配字符結尾,同$
'\d'    匹配數字 0 - 9
'\D'    匹配非數字
'\w'    匹配[A - Za - z0 - 9 ]
'\W'    匹配非[A - Za - z0 - 9 ]
's'     匹配空白字符、\t、\n、\r , re.search( "\s+" , "ab\tc1\n3" ).group() 結果 '\t'
 
'(?P<name>...)' 分組匹配 re.search( "(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})" , "371481199306143242" ).groupdict( "city" ) 結果{ 'province' : '3714' , 'city' : '81' , 'birthday' : '1993' }
 
最經常使用的匹配方法
re.match 從頭開始匹配
re.search 匹配包含
re.findall 把全部匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符當作列表分隔符
re.sub      匹配字符並替換
僅需輕輕知道的幾個匹配模式
re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
M(MULTILINE): 多行模式,改變 '^' '$' 的行爲(參見上圖)
S(DOTALL): 點任意匹配模式,改變 '.' 的行爲
 
本節課做業

開發一個簡單的python計算器

  1. 實現加減乘除及拓號優先級解析
  2. 用戶輸入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等相似公式後,必須本身解析裏面的(),+,-,*,/符號和公式(不能調用eval等相似功能偷懶實現),運算後得出結果,結果必須與真實的計算器所得出的結果一致
相關文章
相關標籤/搜索