Python內建模組181101
阿新 • • 發佈:2018-11-07
模組的定義使用
1、模組的定義
- 模組:用來從邏輯上組織Python程式碼(變數,函式,類,邏輯:實現一個功能),本質就是.py結尾的Python檔案(檔名:test.py,模組名:test)
包:用來從邏輯上組織模組的,本質是一個目錄(必須帶有一個__init__.py的檔案)。
2、匯入方法
import mod1
import mod1,mod2,mod3
from mod1 import * #匯入mod1中所有的變數,函式等(不建議使用)
from mod1 import say_hello as say_hello2 #當與本地模組衝突是可以使用別名
- import mod1 和 from mod1 import *
# Author:Li Dongfei
import mod1
mod1.say_hello('dongfei')
# Author:Li Dongfei
from mod1 import *
say_hello('dongfei')
- 加環境變數
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
3、import的本質
匯入模組的本質就是把Python檔案解釋一遍
- 直接import相當於將mod1的程式碼賦值給mod1,需要用mod1.xxx呼叫
- from xxx import是直接將mod1中程式碼放到當前程式碼中執行,所有可以直接呼叫
匯入包的本質是在解釋執行包下的__init__.py檔案
4、匯入優化
from mods import *
5、模組的分類
- 標準庫
- 開源模組
- 自定義模組
內建模組
1、time和datetime模組
# Author:Li Dongfei import time,datetime print(time.time()) #時間戳 print(time.localtime().tm_year) #本地時間,元組形式,可接受時間戳 print(time.gmtime()) #utc時間,元組形式,可接受時間戳 print(time.mktime(time.localtime())) #元組形式轉換為時間戳 print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) #自定義字串格式 print(time.strptime("2018-11-05 17:42:07","%Y-%m-%d %H:%M:%S")) #字串轉換為元組格式 print(time.asctime()) #接受元組 print(time.ctime()) #接受時間戳 print(datetime.datetime.now()) #獲取當前時間 print(datetime.datetime.now()+datetime.timedelta(3)) #三天後的時間 print(datetime.datetime.now()+datetime.timedelta(-3)) #三天前的時間 print(datetime.datetime.now()+datetime.timedelta(hours=3)) #三小時後的時間 print(datetime.datetime.now()+datetime.timedelta(minutes=3)) #三分鐘後的時間
2、random模組
# Author:Li Dongfei
import random
print(random.random()) #隨機浮點數,0 - 1
print(random.randint(1,7)) #隨機整數,1 - 7(包括7)
print(random.randrange(1,9)) #隨機整數,1 - 9(不包括9)
print(random.choice('dongfei')) #隨機從字串,元組,列表等中取一個元素
print(random.sample('hello',2)) #從字串中隨機取2位
print(random.uniform(1,3)) #取浮點數1 - 3
list1 = [1,2,3,4,5,6,7,8]
random.shuffle(list1)
print(list1)
# 驗證碼生成程式碼
checkcode=''
for i in range(4):
current = random.randrange(0,4)
if current == i:
tmp = chr(random.randint(65,90))
else:
tmp = random.randint(0,9)
checkcode += str(tmp)
print(checkcode)
3、os模組
# Author:Li Dongfei
import os
print(os.getcwd()) #當前檔案所在目錄
os.chdir("C:\\Users") #切換目錄
os.chdir(r"C:\Users")
print(os.curdir) #返回當前目錄
print(os.pardir) #返回父目錄
#os.makedirs(r"C:\a\b\c\d") #遞迴建立目錄
#os.removedirs(r"C:\a\b\c\d") #遞迴刪除目錄(清理空資料夾)
#os.mkdir(r"C:\e") #建立一個目錄
#os.rmdir(r"C:\e") #刪除一個目錄
print(os.listdir(".")) #列出當前目錄的檔案及資料夾
#os.remove("xxx") #刪除一個檔案
#os.rename("oldname","newname") #重新命名
print(os.stat(r'D:\PycharmProjects\p1810\hello.py')) #檢視檔案的資訊
print(os.sep) #獲取作業系統的路徑分隔符
print(os.linesep) #獲取換行分隔符
print(os.pathsep) #獲取環境變數分隔符
print(os.environ) #獲取環境變數
print(os.name) #顯示系統名
os.system("dir") #執行命令
#os.path.abspath() #獲取檔案的絕對路徑
print(os.path.split(r"C:\a\b\c.txt"))
print(os.path.dirname(r"C:\a\b\c.txt")) #獲取目錄名
print(os.path.basename(r"C:\a\b\c.txt")) #獲取檔名
print(os.path.exists(r"C:\a\b\c.txt")) #判讀路徑是否存在
print(os.path.isabs(r"C:\a\b\c.txt")) #判讀是否為絕對路徑
print(os.path.isfile(r"C:\a\b\c.txt")) #判讀是否為一個檔案
print(os.path.getatime(r'D:\PycharmProjects\p1810\hello.py'))
print(os.path.getmtime(r'D:\PycharmProjects\p1810\hello.py'))
print(os.path.getctime(r'D:\PycharmProjects\p1810\hello.py'))
4、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]
5、shutil模組
# Author:Li Dongfei
import shutil
f1 = open("1.txt",encoding="utf-8")
f2 = open("2.txt","w")
shutil.copyfileobj(f1,f2) #copy檔案
shutil.copyfile("2.txt","3.txt")
shutil.copymode("3.txt","4.txt") #僅copy許可權
shutil.copystat("4.txt","5.txt") #copy狀態資訊
shutil.copy("4.txt","5.txt") #copy檔案和許可權
shutil.copy2("4.txt","5.txt") #copy檔案和狀態資訊
shutil.copytree("D:\PycharmProjects","D:\PycharmProjects2") #遞迴cp
shutil.rmtree("D:\PycharmProjects2") #遞迴刪除
shutil.move("5.txt","6.txt") #移動檔案
shutil.make_archive("PycharmProjects","zip","D:\PycharmProjects") #壓縮歸檔
6、shelve模組
shelve模組是一個簡單的k,v將記憶體資料通過檔案持久化的模組,可以持久化任何pickle可支援的python資料格式
# Author:Li Dongfei
import shelve,datetime
d = shelve.open('shelve_test') #開啟一個檔案
info = {'age':22,"job":'it'}
name = ["redis","mysql","sqlserver"]
d["name"] = name
d["info"] = info
d['date'] = datetime.datetime.now()
d.close()
import shelve
d = shelve.open('shelve_test')
print(d.get("name"))
print(d.get("info"))
print(d.get("date"))
7、configparser模組
- 寫配置檔案
# Author:Li Dongfei
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '45',
'Compression': 'yes',
'CompressionLevel': '9'}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini', 'w') as configfile:
config.write(configfile)
- 查配置檔案
# Author:Li Dongfei
import configparser
conf = configparser.ConfigParser()
conf.read("example.ini")
print(conf.defaults())
print(conf.sections())
print(conf['bitbucket.org']['user']) #查
sec = conf.remove_section('bitbucket.org') #刪
conf.write(open('example2.ini',"w"))
8、hashlib
# Author:Li Dongfei
import hashlib
m = hashlib.md5()
m.update(b"Hello")
print(m.hexdigest())
m.update(b"World")
print(m.hexdigest())
m2 = hashlib.md5()
m2.update(b"HelloWorld")
print(m2.hexdigest())
9、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'}
示例:
# Author:Li Dongfei
import re
res1 = re.match("^dong","dong123fei")
res2 = re.match("^dong\d","dong123fei") #\d代表一個數字
res3 = re.match("^dong\d+","dong123fei") #+代表一個或多個
print(res1.group(),res2.group(),res3.group())