什麼時模塊python
Python中的模塊其實就是XXX.py 文件算法
模塊分類shell
Python內置模塊(標準庫)編程
自定義模塊json
第三方模塊ubuntu
使用方法數組
import 模塊名app
form 模塊名 import 方法名dom
說明:實際就是運行了一遍XX.py 文件函數
導入模塊也能夠取別名
如: import time as t
import time as t print(t.time())
定位模塊
自定義模塊
咱們本身寫的XX.py 文件就是一個模塊,在項目中能夠引用這個模塊調用裏面的方法。
__all__[]關鍵字
__all__ = ["函數名","類名","方法名"]
沒有all關鍵字 全部方法均可以訪問到
使用all關鍵字
模塊包就是爲了防止模塊重名
兩個模塊在同一個文件夾裏 而且有個__init__.py 文件
__init__.py 文件內容
# -*- coding: utf-8 -*- # 聲明字符編碼 # coding:utf-8 # 在外部文件中 import all中的模塊 __all__ = ["receMsage","myModelDemo"] #"myModelDemoOne" import sys sys.path.append('/home/ubuntu/code/Python核心編程') print(sys.path) # 外部文件中訪問模塊中的方法 from.import receMsage
__init__.py
文件,那麼這個文件夾就稱之爲包
標準庫
import os import sys import random import time import datetime import json import pickle import shelve import xml.etree.ElementTree as et import xml import configparser import hashlib import logging import re
筆記
def time_test(): print('\r\n============time時間模塊測試============\r\n') """ 1:時間戳:time.time() 1970 1 1 0點 秒數 2:結構化時間: time.localtime() 和 time.gmtime() 返回的是時間對象(tm_year,tm_mon,tm_wday) 3:字符串時間 """ print("時間戳:%s" % time.time()) t1 = time.localtime() # print(dir(t1)) print('返回時間對象:%s 年 %s 月 %s 日' % (t1.tm_year, t1.tm_mon, t1.tm_mday)) # t2 = time.gmtime() # print(dir(t2)) # 時間戳轉爲時間對象(結構化時間) t3 = time.localtime() print(t3) # 將結構化時間轉爲時間戳 t4 = time.mktime(t3) print(t4) # 將結構化時間轉字符串時間 t5 = time.strftime("%Y-%m-%d %X", t3) print(t5) t8 = time.asctime(t3) print(t8) # 將字符串時間轉爲結構化時間 t6 = time.strptime(t5, '%Y-%m-%d %X') print(t6) # 將時間戳轉爲特定的字符串時間 t7 = time.ctime(t4) print(t7) # 睡眠多少秒才繼續執行 # time.sleep(2) def random_test(): print('\r\n============random模塊測試============\r\n') print(random.random()) # 0-1 返回float類型 print(random.randint(1, 10)) # 1-10 整形 print(random.randrange(1, 10)) print(random.choice([1, 'a', 3, 'w', 5])) # 隨機返回列表中的數據 print(random.sample(['b', 'z', 1, 3, 'he', 4, '我'], 4)) # 隨機返回集合中的內容4個 # 驗證碼 def v_code(n): result = "" for i in range(n): # 隨機數字 num = random.randint(0, 9) # 隨機字母 f = chr(random.randint(65, 122)) s = str(random.choice([num, f])) result += s return result # 調用 print("隨機驗證碼:%s" % (v_code(5))) def os_test(): print('\r\n============OS模塊測試============\r\n') # 獲取當前文件路徑 print(os.getcwd()) # 建立文件夾 # os.makedirs("makdir") # 刪除文件夾 # os.removedirs('makdir') # 獲取當前文件同級的全部文件 print(os.listdir()) # 獲取文件信息 print(os.stat("11-lnh-python模塊.py")) print(os.name) # 獲取絕對路徑 print(os.path.abspath("makdir")) a = "User/Administrator" c = "python/基礎" print(os.path.join(a, c)) def sys_test(): print('\r\n============sys模塊測試============\r\n') """ sys.argv # 執行參數List ,第一個元素是程序自己路徑 sys.exit(n) # 退出程序,正常退出時exit(0) sys.version # 獲取Python解析程序的版本信息 sys.maxint # 最大的Int值 sys.path # 返回模塊的搜索路徑,初始時使用Python環境變量的值 sys.platform # 返回操做系統平臺名稱 """ print(sys.platform) print(sys.path) print(sys.version) # print("程序準備退出...") # sys.exit(0) # print('程序退出後....') # 接收參數 ['11-lnh-python模塊.py', 'select', '12'] print(sys.argv) for i in range(100): # 打完後一次性顯示 sys.stdout.write('#') # time.sleep(1) # # 馬上刷新 # sys.stdout.flush() def json_test(): print("\r\n==================json模塊測試==================\r\n") js = { 'name': 'BeJson', "url": "http://www.bejson.com", "page": 88, "isNonProfit": True, "address": { "street": "科技園路.", "city": "江蘇蘇州", "country": "中國" }, "links": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" }, { "name": "SoSo", "url": "http://www.SoSo.com" } ] } # # json 轉字符串(將全部的單引號轉爲雙引號) # jd = json.dumps(js) # print(jd) # with open("../files/BeJson", "w", encoding="utf-8") as f: # f.write(jd) # ----------->json.dump(js,f) # print("保存磁盤完成") # 讀取數據 with open("../files/BeJson", "r", encoding="utf-8") as f: # 將字符串轉爲字典 jl = json.loads(f.read()) # -------->json.load(f) print(jl) print(type(jl)) def pickle_test(): print("\r\n==================pickle模塊測試==================\r\n") js = { 'name': 'BeJson', "url": "http://www.bejson.com", "page": 88, "isNonProfit": True, "address": { "street": "科技園路.", "city": "江蘇蘇州", "country": "中國" }, "links": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" }, { "name": "SoSo", "url": "http://www.SoSo.com" } ] } # 將字符串序列化爲字節 data = pickle.dumps(js) print(data) print("序列化後類型爲:%s" % type(data)) # 將字符串字節轉爲字典 da = pickle.loads(data) print(da) print("loads序列化類型爲:%s" % type(da)) def shelve_test(): print("\r\n==================shelve模塊測試==================\r\n") # # 數據傳輸 # js = { # 'name': 'BeJson', # "url": "http://www.bejson.com", # "page": 88, # "isNonProfit": True, # "address": { # "street": "科技園路.", # "city": "江蘇蘇州", # "country": "中國" # }, # "links": [ # { # "name": "Google", # "url": "http://www.google.com" # }, # { # "name": "Baidu", # "url": "http://www.baidu.com" # }, # { # "name": "SoSo", # "url": "http://www.SoSo.com" # } # ] # } # # 拿到文件的句柄返回的是一個字典類型 # f = shelve.open(r"../files/ShelveJson") # 將字典放入文本 # f["Info"] = js # f.close() # 取值 f = shelve.open(r"../files/ShelveJson") print(f.get("Info")["name"]) def xml_test(): print("\r\n==================XML模塊測試==================\r\n") # 讀取xml文件 tree = et.parse("../files/app") root = tree.getroot() for i in root: print(i.tag) print(i.attrib) a = 0 for j in i: # ---> i.iter('add') 只便利指定節點 # 獲取節點名稱 print(j.tag) # 獲取屬性值 print(j.attrib) # 獲取便籤內容 <name>張三</name> ----> 獲得:張三 print(j.text) # 新增節點屬性 # j.set("index", '1') a += 1 # tree.write("../files/app") # 遍歷指定節點內容 tree = et.parse("../files/app") root = tree.getroot() for i in root: print(i.tag) print(i.attrib) a = 0 for j in i.iter('add'): # ---> i.iter('add') 只便利指定節點 print(j.attrib) def regex_test(): print("\r\n==================re模塊測試==================\r\n") # 正則就是作模糊匹配 with open("../files/retext", "r", encoding="utf-8") as f: str = f.read() print(str) print(re.findall('href', str)) # 分組 返回匹配的第一個 r1 = re.search("(?P<name>[a-z]+)\d+", "zhangsan15lisi23").group('name') print(r1) r2 = re.search("(?P<name>[a-z]+)(?P<age>\d+)", "zhangsan15lisi23").group('age') print(r2) # 返回匹配的第一個 r3 = re.match("\d+", "154alix12lisi45xiaoming25").group() print(r3) # 以什麼分割返回分割的數組 r4 = re.split('[ |]', 'rer|eabc jiklabc|ljiabcjijk') print(r4) r5 = re.split('[ab]', 'asdabcd') print(r5) # 替換:匹配規則 替換內容 原類容 匹配次數 r6 = re.subn('\d', 'A', 'fjlfjsl212jkj343ljlj', 3) print(r6) # 編譯 (可屢次使用) r7 = re.compile('\d+') f1 = r7.findall('sfsf4sfsf455sffs451dfsa5') print(f1) # 功能方法和findall同樣,只不過返回的是一個迭代器(適用於大數據的處理) rf = re.finditer('\d', 'fsdf1fsf151sfsfasf84885afasf874af') r8 = next(rf).group() print(r8) # ?: 表示去掉優先級 r9 = re.findall('www\.(?:baidu|163)\.com', 'www.baidu.com') print(r9) def logging_test(): print('\n==================logging模塊測試=====================\n') """ 可見在logging.basicConfig()函數中可經過具體參數來更改logging模塊默認行爲,可用參數有 filename:用指定的文件名建立FiledHandler(後邊會具體講解handler的概念),這樣日誌會被存儲在指定的文件中。 filemode:文件打開方式,在指定了filename時使用這個參數,默認值爲「a」還可指定爲「w」。 format:指定handler使用的日誌顯示格式。 datefmt:指定日期時間格式。 level:設置rootlogger(後邊會講解具體概念)的日誌級別 stream:用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout或者文件(f=open('test.log','w')),默認爲sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。 format參數中可能用到的格式化串: %(name)s Logger的名字 %(levelno)s 數字形式的日誌級別 %(levelname)s 文本形式的日誌級別 %(pathname)s 調用日誌輸出函數的模塊的完整路徑名,可能沒有 %(filename)s 調用日誌輸出函數的模塊的文件名 %(module)s 調用日誌輸出函數的模塊名 %(funcName)s 調用日誌輸出函數的函數名 %(lineno)d 調用日誌輸出函數的語句所在的代碼行 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示 %(relativeCreated)d 輸出日誌信息時的,自Logger建立以 來的毫秒數 %(asctime)s 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒 %(thread)d 線程ID。可能沒有 %(threadName)s 線程名。可能沒有 %(process)d 進程ID。可能沒有 %(message)s用戶輸出的消息 """ # ====================basicConfig===================== # 日誌級別 debug info warning error critical # print('默認等級輸出:') # logging.debug('debug日誌') # logging.info('info日誌') # logging.warning('warning日誌') # logging.error('error日誌') # logging.critical('critical日誌') # # # 以上默認打印warning以上級別的日誌會輸出 # 設置等級後 print('設置等級後') # 日誌配置 logging.basicConfig(level=logging.DEBUG, # 日誌等級 filename='../files/Log/logger.log', # 日誌路徑及文件名 filemode='a', # a:追加 w:覆蓋 format="%(asctime)s [%(filename)s 行:%(lineno)d] %(message)s \n" # 日誌輸出格式 ) logging.debug('debug日誌') # logging.info('info日誌') # logging.warning('warning日誌') # logging.error('error日誌') # logging.critical('critical日誌') # ====================logger對象======================= # 1:建立對象 logger = logging.getLogger() # 2:建立文件Handler fh = logging.FileHandler('../files/Log/logger.log') # 3:建立屏幕輸出Handler ch = logging.StreamHandler() # 4:屏幕文件輸出日誌格式 fm = logging.Formatter("%(asctime)s [%(filename)s 行:%(lineno)d] %(message)s \n") fh.setFormatter(fm) ch.setFormatter(fm) # :5:將文件屏幕添加到logger對象中 logger.addHandler(fh) logger.addHandler(ch) # 設置logger輸出等級 logger.setLevel("DEBUG") # 使用logger打印信息 logging.info('info日誌') logging.warning('warning日誌') logging.error('error日誌') logging.critical('critical日誌') def configparse_test(): print('\n==================configparse模塊測試=====================\n') # 新增一個配置文件 config = configparser.ConfigParser() # config['DEFAULT'] = {'ServerAliveInterval': '45', 'Compression': 'yes', # 'CompressionLevel': '9', # 'ForwardX11': 'yes'} # config['bitbucket.org'] = {'User': 'ZhangSan'} # config['topsecret.server.com'] = {'Port': 50022, # 'ForwardX11': 'no'} # # with open('../files/config.init', 'w') as f: # config.write(f) # 查 print(config.sections()) config.read('../files/config.init') # DEFULT 不打印 config_sect = config.sections() print(config_sect) print('bytebong.com' in config) print(config['bitbucket.org']['User']) print('遍歷節點新消息,不管是遍歷哪一個節點,DEFAULT的節點下的信息也會被遍歷出來') for key in config['topsecret.server.com']: print(key) # 返回key列表 print(config.options('topsecret.server.com')) # 返回 key value 列表 print(config.items('topsecret.server.com')) # 增 # config.add_section('address') # config.set('address', 'UTC', '10212') # config.add_section('INFO') # config.set('INFO', 'Name', 'Lisi') # config.set('INFO', 'Age', '18') # config.set('INFO', 'Sex', '男') # 刪 # config.remove_section('address') # config.remove_option('INFO', 'Sex') # 改 config['INFO']['Name'] = '雷鋒' # 從新寫入文件 with open('../files/config.init', 'w') as cf: config.write(cf) def hashib_test(): print('\n==================hashib模塊測試=====================\n') # has 算法 ----->摘要算法 md = hashlib.md5() md.update('hello'.encode('utf8')) print(md.hexdigest()) # 5d41402abc4b2a76b9719d911017c592 # 當前文件調用 modular.receMsage 模塊下的 get_name方法,打印__name__值爲:modular.receMsage # 若是在receMsage.py 文件中執行,打印__name__值爲:__main__ # 做用1:測試代碼,外部引用調用的時候,就不會運行個人測試代碼 2: if __name__ == '__main__': # get_name() time_test() random_test() os_test() sys_test() json_test() pickle_test() shelve_test() xml_test() regex_test() logging_test() configparse_test() hashib_test()