1、正則深刻python
re正則表達式
匹配數字開頭shell
import re #匹配以數字開頭 p = re.compile("^[0-9]") #使用compile進行編譯正則表達式,在大量匹配處理的時候很是有效 m = p.match("14534Abc") print(m.group()) #輸出結果:1 ''' m = re.match("^[0-9]","14534Abc") print(m.group()) #輸出結果:1 '''
匹配數字、字母等開頭編程
import re #匹配以數字和字母開頭 p = re.compile("^[0-9A-Za-z]") m = p.match("AK14534Abc") print(m.group()) #輸出結果:A
匹配ip地址:json
#匹配IP地址 string = '180.115.183.45 - - [03/Feb/2016:10:35:50 +0800] "CONNECT imppl.tradedoubler.com:443 HTTP/1.0" 400 172 "-" "-"' p = re.compile("([0-9]{1,3}\.){3}\d{1,3}") ip = p.match(string).group() # ip = re.match("([0-9]{1,3}\.){3}\d{1,3}",string).group() print(ip)
正則表達式經常使用5種操做緩存
re.match(pattern,string) #從頭匹配bash
re.search(pattern,string) #匹配整個字符串,直到找到一個匹配dom
re.split() #將匹配到的格式當作分隔點對字符串分紅列表類型ide
re.findall() # 找到全部要匹配的字符並返回列表格式函數式編程
示例: import re string = "sdsdss(welcome)dff(china)" m = re.findall('\(.*?\)',string) #匹配全部以(開頭和以)結尾的字符串,返回類型爲list print(m) #['(welcome)', '(china)'] print(type(m)) #<class 'list'>
re.sub(pattern, repl, string, count,flag) # 替換匹配到的字符
示例: import re string = "sdsdss(welcome)dff(china)" m = re.sub("\(|\)","\"",string) #匹配"("或者")",而後將其替換成雙引號 print(m) #sdsdss"welcome"dff"china" print(type(m)) #<class 'str'>
模式
re.l #大小寫不敏感
import rz string = "swht" m = re.search("[A-Z]",string,flags = re.I) print(m.group()) #s
匹配手機號:
import re string = "sdssaawa15865921165sdsdscf" m = re.search("(1)([358]\d{9})",string) print(m.group())
匹配IP地址:
import re ip_addr = "inet 192.168.60.223 netmask 0xffffff00 broadcast 192.168.60.255" IP = re.search("(([1-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])\.){3}[0-9]{1,3}",ip_addr) print(IP.group()) #192.168.60.223
匹配郵箱地址:
import re emailstr = "qingbo.song@gmail.com www.baidu.com" email = re.search("^[a-z]([0-9a-z]|\.){4,20}@[0-9a-z]{0,10}\.[0-9a-z]{0,8}",emailstr) print(email.group()) #qingbo.song@gmail.com #只匹配gmail郵箱 import emailstr = "test@163.com www.baidu.com" email = re.search("^[a-z]([0-9a-z]|\.){4,20}@gmail\.com",emailstr) if email: print(email.group()) #test@163.com else: print("系統只接受163郵箱註冊,感謝你的支持!")
2、模塊
模塊介紹
模塊:代碼實現了某個功能的代碼集合。 相似於函數式編程和麪向過程編程,函數式編程則完成一個功能,其餘代碼用來處理和代碼間的耦合。可能須要多個.py的文件組成。 模塊類型: 1. 自定義模塊 2. 內置標準模塊(標準庫) 3. 開源模塊 1. 下載: 1. yum 2. apt-get 3. pip 4. easy_install 5. 源碼編譯安裝 python stup.py install
導入模塊
import module from module.xx.xx import xx from module.xx.xx import xx as rename #不推薦下面的導入方式,若是被導入的模塊中含有與當前文件中相同名稱的函數,容易產生調用混亂。 from module.xx.xx import *
time & datetime模塊
import time import datetime #做用:計算一個程序從執行到結束用的時間 print(time.clock()) #返回處理器時間,3.3開始已廢棄 print(time.process_time()) #返回處理器時間,3.3開始已廢棄 #獲取系統的當前時間,從1970年1月1日0:00到當前時間的秒數 print(time.time()) #返回當前系統時間戳 #格式化輸出的時間 print(time.ctime()) #輸出Tue Jan 26 18:23:48 2016 ,當前系統時間 print(time.ctime(time.time()-86640)) #將時間戳轉爲字符串格式,輸出昨天的時間Tue Jan 25 18:23:48 2016 #time.struct_time(tm_year=2016, tm_mon=2,c=48, tm_wday=5, tm_yday=44, tm_isdst=0) #gmtime是從零時區算起的格林時間 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格式轉成指定的字符串格式 #time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #'2016-02-14 12:45:49' print(time.strptime("2016-01-28","%Y-%m-%d") ) #將字符串格式轉換成struct_time格式 #datetime module #將時間戳轉換成日期格式 print(datetime.date.today()) #輸出格式python2 2016-01-26 python3:datetime.date(2016, 2, 14) 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)
random模塊
產生隨機數
import random #產生隨機小數 print(random.random()) ''' 0.8426794741026359 0.8703558703687821 ''' #產生隨機整數 print(random.randint(1,10)) print(random.randrange(1,10)) ''' 1 9 '''
生成隨機驗證碼
import random def checkcode(n): checkcode = '' for i in range(n): current = random.randrange(0,4) if current != i: tmp = chr(random.randint(65,90)) else: tmp = random.randint(0,9) checkcode += str(tmp) return checkcode print(checkcode(6))
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") 重命名文件/目錄,或者移動,至關於shell命令mv 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命令,直接顯示,只是單個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所指向的文件或者目錄的最後修改時間
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] #輸入一行內容,減去後面的最後一個\n
使用sys和time模塊生成進度條
生成進度條。調用函數輸入的參數爲進度條長度 ''' import sys,time def processbar(rangenum): for i in range(rangenum): if i == 0: sys.stdout.write("0%[#") elif i == rangenum - 1: sys.stdout.write("#]100%") else: sys.stdout.write("#") #刷新緩存,使其實時顯示出來 sys.stdout.flush() time.sleep(0.5) processbar(16)
json 和 pickle
json和pickle是用於序列化的兩個模塊:
json
json模塊提供了四個功能:dumps、dump、loads、load
json在全部的語言中都通用,存取的字節字符json:用於處理字符串和python數據類型間的轉換
pickle:
pickle模塊提供了四個功能:dumps、dump、loads、load
在python中獨有一個模塊,存取二進制字符pickle:用於處理python特有類型和python數據類型間的轉換
不單單能夠序列化簡單的字符、列表、字典,還能序列化函數、類以致於整個程序
關於dump和dumps的區別
dump直接將序列化後的字符寫到文件中,dumps是將序列化後的字符先賦給一個變量,而後再有write方法將其寫入到文件中
關於load和loads的區別
load直接從文件中讀取內容,loads是從內存中獲取文件的內容
shutil模塊
高級的 文件、文件夾、壓縮包 處理模塊
shutil.copyfileobj(fsrc, fdst[, length])
功能:將文件內容拷貝到另外一個文件中,能夠部份內容
shutil.copyfile(src, dst)
功能:僅拷貝文件
shutil.copymode(src, dst)
功能:僅拷貝權限,內容、組、用戶均不變
shutil.copystat(src, dst)
功能:拷貝狀態的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst)
功能:拷貝文件和權限
shutil.copy2(src, dst)
功能:拷貝文件和狀態信息