1. 程式人生 > >Python內建模組181101

Python內建模組181101

模組的定義使用

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())