pythonday05(正則深刻、冒泡排序算法、自定義模塊、經常使用標準模塊)

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'>
View Code

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'>
View Code

模式

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)
View Code
random模塊
產生隨機數
import random
 
#產生隨機小數
print(random.random())
'''
0.8426794741026359
0.8703558703687821
'''
 
#產生隨機整數
print(random.randint(1,10))
print(random.randrange(1,10))
'''
1
9
'''
View Code
生成隨機驗證碼
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))
View Code

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所指向的文件或者目錄的最後修改時間
View Code

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)
View Code

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)

功能:拷貝文件和狀態信息
相關文章
相關標籤/搜索