1. 程式人生 > >2018.8.20 Python之路---常用模塊

2018.8.20 Python之路---常用模塊

分鐘 import 問題 lena alt read 工作目錄 dir 文件夾

一、re模塊

查找:

re.findall(‘正則表達式’,‘字符串’)

匹配所有符合正則表達式的內容,形成一個列表,每一項都是列表中的一個元素。

ret = re.findall(\d+,sjkhk172按實際花費928) # 正則表達式,帶匹配的字符串,flag
ret = re.findall(\d,sjkhk172按實際花費928) # 正則表達式,帶匹配的字符串,flag
print(ret)

re.search(‘正則表達式’,‘字符串’)

 只匹配從左到右的第一個,得到的不是直接的結果,而是一個變量,通過這個變量的group方法來獲取結果

如果沒有匹配到,會返回None,使用group會報錯
ret = re.search(\d+,sjkhk172按實際花費928)
print(ret)  # 內存地址,這是一個正則匹配的結果
print(ret.group()) # 通過ret.group()獲取真正的結果
ret = re.search(\d+,sjkhk172按實際花費928)
if ret :   # 內存地址,這是一個正則匹配的結果
    print(ret.group()) # 通過ret.group()獲取真正的結果

re.match(‘正則表達式‘,‘字符串’)

 從頭開始匹配,相當於search中的正則表達式加上一個^
ret = re.match(\d+$,172sjkhk按實際花費928)
print(ret)

字符串的擴展處理:替換、切割

split:切割

s = alex83taibai40egon25
ret = re.split(\d+,s)
print(ret)     #[‘alex‘, ‘taibai‘, ‘egon‘, ‘‘]

sub:替換

ret = re.sub(\d+,H,alex83taibai40egon25)
print(ret)     #alexHtaibaiHegonH



ret = re.sub(\d+
,H,alex83taibai40egon25,1) print(ret) #alexHtaibai40egon25

subn:替換。返回一個元組,第二個元素是替換的次數。

ret = re.subn(\d+,H,alex83taibai40egon25)
print(ret)
#(‘alexHtaibaiHegonH‘, 3)

re模塊的進階:時間/空間

compile:編譯正則表達式,編譯成字節碼,節省使用正則表達式解決問題的時間。

ret = re.compile(\d+)   # 已經完成編譯了
print(ret)
res = ret.findall(alex83taibai40egon25)
print(res)
res = ret.search(sjkhk172按實際花費928)
print(res.group())

finditer:返回一個叠代器,所有匹配到的內容需要叠代取到,叠代取到的每一個結果都需要group取具體值,節省內存空間。

ret = re.finditer(\d+,alex83taibai40egon25)
for i in ret:
    print(i.group())

分組:

1.給不止一個字符的整體做量詞約束的時候    www(\.[\w]+)+    www.baidu.com
2.優先顯示,當要匹配的內容和不想匹配的內容混在一起的時候,
就匹配出所有內容,但是對實際需要的內容進行分組
3.分組和re模塊中的方法 :
findall : 分組優先顯示 取消(?:正則)
search :
可以通過.group(index)來取分組中的內容
可以通過.group(name)來取分組中的內容
正則 (?P<name>正則)
使用這個分組 ?P=name
split : 會保留分組內的內容到切割的結果中
ret = re.split(\d+,alex83taibai40egon25)
print(ret)
#[‘alex‘, ‘taibai‘, ‘egon‘, ‘‘]
ret = re.split((\d+),alex83taibai40egon25aa)
print(ret)
#[‘alex‘, ‘83‘, ‘taibai‘, ‘40‘, ‘egon‘, ‘25‘, ‘aa‘]

二、random模塊

取隨機小數:數學計算

print(random.random()) # 取0-1之間的小數
print(random.uniform(1,2)) # 取1-2之間的小數

取隨機整數 : 彩票 抽獎

print(random.randint(1,2)) # [1,2]
print(random.randrange(1,2)) # [1,2)
print(random.randrange(1,200,2)) # [1,200) 每兩個取一個

從一個列表中隨機取值:抽獎

l = [a,b,(1,2),123]
print(random.choice(l))
print(random.sample(l,2))

打亂一個列表的順序,在原列表的基礎上直接進行修改,節省空間

洗牌

l = [a,b,(1,2),123]
random.shuffle(l)
print(l)      #[(1, 2), ‘a‘, 123, ‘b‘]

驗證碼:

4位數字驗證碼

6位數字驗證碼

6位數字+字母驗證碼

def code(n = 6,alpha = True):
    s = ‘‘
    for i in range(n):
        num = str(random.randint(0,9))
        if alpha:
            alpha_upper = chr(random.randint(65,90))
            alpha_lower = chr(random.randint(97,122))
            num = random.choice([num,alpha_upper,alpha_lower])
        s += num
    return s
print(code(4,False))
print(code(alpha=False))

三、時間模塊(import time)

time.sleep(2) 程序走到這會等待2秒

時間格式:

時間戳時間:

print(time.time())    #1534767054.6681

格式化時間:

print(time.strftime(%Y-%m-%d %H:%M:%S)) # str format time
# 2018-08-20 20:17:08
print(time.strftime(%y-%m-%d %H:%M:%S)) # str format time
# 18-08-20 20:17:08
print(time.strftime(%Y-%m-%d %X))
# 2018-08-20 20:19:25
print(time.strftime(%c))
# Mon Aug 20 20:18:14 2018

結構化時間:

struct_time = time.localtime()  # 北京時間
print(struct_time)
#time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=20, tm_min=21, tm_sec=23, tm_wday=0, tm_yday=232, tm_isdst=0)
print(struct_time.tm_mon)
# 8
print(time.gmtime())     #倫敦時間

時間戳時間換成字符串時間

struct_time = time.localtime(1500000000)
# print(time.gmtime(1500000000))
ret = time.strftime(%y-%m-%d %H:%M:%S,struct_time)
print(ret)

字符串時間轉時間戳時間

struct_time = time.strptime(2018-8-8,%Y-%m-%d)
print(struct_time)
res = time.mktime(struct_time)
print(res)

技術分享圖片

練習題:

1.查看一下2000000000時間戳時間表示的年月日
時間戳 - 結構化 - 格式化
struct_t = time.localtime(2000000000)
print(struct_t)
print(time.strftime(%y-%m-%d,struct_t))

2.將2008-8-8轉換成時間戳時間

t = time.strptime(2008-8-8,%Y-%m-%d)
print(time.mktime(t))

3.請將當前時間的當前月1號的時間戳時間取出來 - 函數

def get_time():
    st = time.localtime()
    st2 = time.strptime(%s-%s-1%(st.tm_year,st.tm_mon),%Y-%m-%d)
    return time.mktime(st2)
print(get_time())
4.計算時間差 - 函數
str_time1 = 2018-8-19 22:10:8
str_time2 = 2018-8-20 11:07:3
struct_t1 = time.strptime(str_time1,%Y-%m-%d %H:%M:%S)
struct_t2 = time.strptime(str_time2,%Y-%m-%d %H:%M:%S)
timestamp1 = time.mktime(struct_t1)
timestamp2 = time.mktime(struct_t2)
sub_time = timestamp2 - timestamp1
gm_time = time.gmtime(sub_time)
# 1970-1-1 00:00:00
print(過去了%d年%d月%d天%d小時%d分鐘%d秒%(gm_time.tm_year-1970,gm_time.tm_mon-1,
                                 gm_time.tm_mday-1,gm_time.tm_hour,
                                 gm_time.tm_min,gm_time.tm_sec))
#   過去了0年0月0天12小時56分鐘55秒

四、sys模塊(import sys)

sys是和python解釋器打交道的。

sys.argv 命令行參數List,第一個元素是程序本身路徑

print(sys.argv)  # argv的第一個參數 是python這個命令後面的值
usr = input(username)
pwd = input(password)
usr = sys.argv[1]
pwd = sys.argv[2]
if usr == alex and pwd == alex3714:
    print(登錄成功)
else:
    exit()

sys.exit(n) 退出程序,正常退出時exit(0),錯誤退出時sys.exit(1)

sys.path 返回模塊的搜索路徑

# 一個模塊能否被順利的導入 全看sys.path下面有沒有這個模塊所在的
# 自定義模塊的時候 導入模塊的時候 還需要再關註 sys.path

sys.modules

print(sys.modules)  # 是我們導入到內存中的所有模塊的名字,存在一個字典中 : 這個模塊的內存地址
print(sys.modules[re].findall(\d,abc126))

五、os模塊(import os #os是和操作系統交互的模塊)

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)  獲取文件/目錄信息
# exec/eval執行的是字符串數據類型的 python代碼
# os.system和 os.popen是執行字符串數據類型的 命令行代碼

# os.system(‘dir‘)  # 執行操作系統的命令,沒有返回值,實際的操作/刪除一個文件 創建一個文件夾 exec
# 程序要處理這些路徑
# ret = os.popen(‘dir‘) # 是和做查看類的操作
# s =ret.read()
# print(s)
# print(s.split(‘\n‘))
# os.listdir / os.path.join
file_lst = os.listdir(D:\sylar\s15)
for path in file_lst:
    print(os.path.join(D:\sylar\s15,path))
print(‘-->‘,os.getcwd())  # current work dir 當前工作目錄
# 並不是指當前文件所在的目錄
# 當前文件是在哪個目錄下執行的
ret = os.popen(dir) # 是和做查看類的操作
s =ret.read()
print(s)

os.chdir(D:\sylar\s15\day18)  # 切換當前的工作目錄
ret = os.popen(dir) # 是和做查看類的操作
s =ret.read()
print(s)

2018.8.20 Python之路---常用模塊