目錄python
os
模塊幹什麼用?編程
與操做系統交互,控制操做系統文件/文件夾json
方法 | 描述 |
---|---|
os.path.isfile() | 判斷是否爲文件 |
os.remove("") | 刪除文件 |
os.rename("","") | 重命名文件 |
os.path.exists() | 判斷是否爲文件夾 |
os.mkdir("test") | 建立文件夾 |
os.rmdir("test") | 刪除文件夾 |
os.listdir() | 列出來文件夾內全部文件 |
os.getcwd() | 獲取當前文件所在文件夾 |
os.path.abspath(file) | 獲取當前文件所在具體路徑(絕對路徑) |
os.path.dirname(os.path.abspath(file)) | 獲取當前執行文件的文件夾 |
os.path.join(os.path.dirname(os.path.abspath(file)),"test.log") | 拼接文件絕對路徑 |
os.walk("文件夾") | 遍歷文件夾下全部文件 |
os.system("dir") | 僞終端,執行命令 |
import os ''' 對文件操做 ''' # 1. 判斷是否爲文件 print(os.path.isfile(r"C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\01 os模塊.py")) # True # 2. 刪除文件 # os.remove("") # 3. 重命名文件 # os.rename("","") ''' 對文件夾操做 ''' # 1. 判斷是否爲文件夾 print(os.path.exists(r"C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習")) # True # 2. 建立文件夾 # os.mkdir("test") # 3. 刪除文件夾 # os.rmdir("test") # 4. 列出來文件夾內全部文件 print(os.listdir(r"C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習")) # ['count_lines.py', 'json許序列化對象.json', 'os模塊.py', 'Pickle許雷華對象.pkl', 't1.log', 't2.log', 'test.py', '模塊的使用.py'] # 5. 獲取當前文件所在文件夾 print(os.getcwd()) # C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習 # 6. 獲取文件所在具體路徑(絕對路徑) print('__file__:', __file__) print(os.path.abspath(__file__)) # C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習\os模塊.py # 7. 獲取文件的文件夾 print(os.path.dirname(os.path.abspath(__file__))) # C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習 # 8. 拼接文件路徑 print(os.path.join(os.path.dirname(os.path.abspath(__file__)),"test.log")) # C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習\test.log # 9. 判斷路徑是否存在(文件or文件夾都適用) print(os.path.exists(r"C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習\count_lines.py")) # True print(os.path.exists(r"C:\Users\Administrator\Desktop\python\python程序編寫\正式班\day 16\練習")) # True # 終端代碼 print(os.system("dir")) # 打印當前全部文件。
sys 模塊與python解釋器交互函數
''' sys模塊 與python解釋器交互 ''' import sys # 最經常使用的就是argv方法,接收命令行參數 print(sys.argv[1]) # 當使用命令行式運行文件,接收多餘的參數
方法 | 描述 |
---|---|
dumps | 在內存中轉換成json串/pickle |
dump | 保存到硬盤json串/pickle |
loads | 在內存中轉換成python數據類型 |
load | 從硬盤中轉換成python數據類型 |
# json 模塊(序列化) # json模塊: 跨平臺數據交互,json串 import json ''' json 序列化 ''' struct_data = {"name": "json", "age": 23, "sex": "male"} print(struct_data) # 將python數據類型轉換爲json,json格式括號內都是雙引號 data = json.dumps(struct_data) print(data,type(data)) # {"name": "json", "age": 23, "sex": "male"} <class 'str'> ''' { "name":"json", "age":23, "sex":"male" } ''' # 將json格式加載爲python數據類型 data = json.loads(data) print(data,type(data)) # {'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'> a = {"name":123} # python中雙引號的字典類型也是json格式 print(a,type(a)) # 注意:python執行程序的時候會把字典中雙引號編程單引號,爲了和json數據類型區分 ''' { "name":123 } ''' # 序列化 with open("json許序列化對象.json","w") as fw: json.dump(struct_data,fw) # 反序列化 with open("json許序列化對象.json","r") as fr: data = json.load(fr) print(data,type(data)) # {'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
# pickle 模塊(序列化) # pickle模塊: 不跨平臺,針對python全部數據類型,如集合,使用方式和json如出一轍 ''' pickle 序列化 ''' import pickle print("#--" * 50) struct_data = {'name': 'json', 'age': 23, 'sex': 'male'} print(struct_data,type(struct_data)) data = pickle.dumps(struct_data) print(data,type(data)) # 二進制 # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' <class 'bytes'> data = pickle.loads(data) print(data,type(data)) # {'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'> # pickle 序列化,須要二進制存儲 with open("Pickle序列化對象.pkl","wb") as fw: pickle.dump(struct_data,fw) # 反 pickle 序列化 with open("Pickle序列化對象.pkl","rb") as fr: data = pickle.load(fr) print(data,type(data)) # {'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
話很少說,直接上模板測試
import os import logging.config # 定義三種日誌輸出格式 開始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ '[%(levelname)s][%(message)s]' # 其中name爲getLogger()指定的名字;lineno爲調用日誌輸出函數的語句所在的代碼行 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' # 定義日誌輸出格式 結束 logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # log文件的目錄,須要自定義文件路徑 # atm logfile_dir = os.path.join(logfile_dir, 'log') # C:\Users\oldboy\Desktop\atm\log logfile_name = 'log.log' # log文件名,須要自定義路徑名 # 若是不存在定義的日誌目錄就建立一個 if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log os.mkdir(logfile_dir) # log文件的全路徑 logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.log # 定義日誌路徑 結束 # log配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, }, 'filters': {}, # filter能夠不定義 'handlers': { # 打印到終端的日誌 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 打印到屏幕 'formatter': 'simple' }, # 打印到文件的日誌,收集info及以上的日誌 'default': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件 'formatter': 'standard', 'filename': logfile_path, # 日誌文件 'maxBytes': 1024 * 1024 * 5, # 日誌大小 5M (*****) 'backupCount': 5, 'encoding': 'utf-8', # 日誌文件的編碼,不再用擔憂中文log亂碼了 }, }, 'loggers': { # logging.getLogger(__name__)拿到的logger配置。若是''設置爲固定值logger1,則下次導入必須設置成logging.getLogger('logger1') '': { # 這裏把上面定義的兩個handler都加上,即log數據既寫入文件又打印到屏幕 'handlers': ['default', 'console'], 'level': 'DEBUG', 'propagate': False, # 向上(更高level的logger)傳遞 }, }, } def load_my_logging_cfg(): logging.config.dictConfig(LOGGING_DIC) # 導入上面定義的logging配置 logger = logging.getLogger(__name__) # 生成一個log實例 logger.info('It works!') # 記錄該文件的運行狀態 return logger if __name__ == '__main__': load_my_logging_cfg()
使用方法以下:編碼
import time import logging import my_logging # 導入自定義的logging配置 logger = logging.getLogger(__name__) # 生成logger實例 def demo(): logger.debug("start range... time:{}".format(time.time())) logger.info("中文測試開始。。。") for i in range(10): logger.debug("i:{}".format(i)) time.sleep(0.2) else: logger.debug("over range... time:{}".format(time.time())) logger.info("中文測試結束。。。") if __name__ == "__main__": my_logging.load_my_logging_cfg() # 在你程序文件的入口加載自定義logging配置 demo()