標籤:logging json pickle shelve
一、logging
用於記錄日誌併線程安全的模組
import logginglogging.basicConfig(level=logging.DEBUG, format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘, datefmt=‘%Y-%m-%d %H:%M:%S %p‘, filename=‘log.txt‘, filemode=‘w‘ )logging.debug("debug messages")logging.info("info messages")logging.warning("warning messages")logging.error("error messages")logging.critical("critical messages")
日誌文本結果
2018-03-23 10:33:43 AM - root - DEBUG -os_module: debug messages2018-03-23 10:33:43 AM - root - INFO -os_module: info messages2018-03-23 10:33:43 AM - root - WARNING -os_module: warning messages2018-03-23 10:33:43 AM - root - ERROR -os_module: error messages2018-03-23 10:33:43 AM - root - CRITICAL -os_module: critical messages
日誌基本配置選項:
| Format |
Description |
| filename |
指定記錄檔名 |
| filemode |
指定動作記錄檔案的模式,預設是‘a’ |
| format |
記錄日誌的格式 |
| datefmt |
記錄日期時間的格式 |
| style |
樣式 |
| level |
指定要記錄的記錄層級 |
| stream |
使用指定的流初始化,與filename不可同時配置 |
| handlers |
指定iterable,與filename和stream不相容 |
日誌等級:
| level |
Numeric value |
| CRITICAL |
50 |
| ERROR |
40 |
| WARNING |
30 |
| INFO |
20 |
| DEBUG |
10 |
| NOTSET |
0 |
日誌格式:
更多日誌詳細資料請猛擊這裡
二、json,pickle,shelve
在程式運行時儲存資料的一種方法是把所有資料以格式化的方式寫入一個簡單的文字檔中,只要儲存和裝載的工具在所選格式上達成一致,我們就可以隨心所欲地使用任何自訂格式。
1、pickle
pickle模組將記憶體中的Python對象轉化為序列化的位元組流,這是一種可以寫入任何類似檔案對象的位元組串,同時,pickle模組也可以根據序列化的位元組流重新構建原來記憶體中的對象。
轉換並寫入檔案:
import pickledb = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}dbfile = open(‘pickle_db‘,‘wb‘)pickle.dump(db,dbfile)dbfile.close()
從檔案中讀取資料:
import pickledbfile = open(‘pickle_db‘,‘rb‘)pickle.load(dbfile)dbfile.close()
直接轉換,不寫入檔案:
import pickledb = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}a = pickle.dumps(db)print("a:",a)b = pickle.loads(a)print("b:",b)
a: b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00Eric Jiaq\x02X\x03\x00\x00\x00ageq\x03X\x02\x00\x00\x0018q\x04X\x03\x00\x00\x00jobq\x05X\x03\x00\x00\x00opsq\x06X\x03\x00\x00\x00payq\x07K\xc8u.‘b: {‘name‘: ‘Eric Jia‘, ‘age‘: ‘18‘, ‘job‘: ‘ops‘, ‘pay‘: 200}
2、json
json主要用於python資料類型與字串之間的轉換,用法與pickle一致
1、dump:轉換為字串存入檔案import jsondb = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}dbfile = open(‘json_db‘,‘w‘)json.dump(db,dbfile)dbfile.close()2、load:從檔案中取出並轉換為Python資料對象dbfile = open(‘json_db‘,‘r‘)json.load(dbfile)dbfile.close()3、dumps,loads:直接轉換,不寫入檔案db = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}a = json.dumps(db)print(a)b = json.loads(a)print(b)
3、shalve
pickle和json可以將python資料類型持久儲存,假如你的檔案系統可以處理任意多需要的檔案,每個檔案都是一個單獨的pickle檔案,這樣可以避免修改一條記錄時都要重新載入和儲存整個資料庫,這就需要將每個pickle檔案名稱當作字典的鍵來儲存,通過索引值來訪問資料,Python標準庫為我們提供了一個名為shelves的模組來做這些事。
建立shelve資料庫
N1 = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}N2 = {‘name‘:‘Bob smith‘,‘age‘:‘28‘,‘job‘:‘java‘,‘pay‘:2000}N3 = {‘name‘:‘David‘,‘age‘:‘38‘,‘job‘:‘go‘,‘pay‘:20000}import shelvedb = shelve.open(‘make_db‘)db[‘N1‘] = N1db[‘N2‘] = N2db[‘N3‘] = N3db.close()
建立出的shelve資料庫如下
重新開啟shelve並通過鍵來取得資料
import shelvedb = shelve.open(‘make_db‘)for key in db: print(key,"=>",db[key])db.close()輸出:N1 => {‘name‘: ‘Eric Jia‘, ‘age‘: ‘18‘, ‘job‘: ‘ops‘, ‘pay‘: 200}N2 => {‘name‘: ‘Bob smith‘, ‘age‘: ‘28‘, ‘job‘: ‘java‘, ‘pay‘: 2000}N3 => {‘name‘: ‘David‘, ‘age‘: ‘38‘, ‘job‘: ‘go‘, ‘pay‘: 20000}
小結:
1、shelve內部會使用pickle來序列化和還原序列化記錄,它的介面像pickle一樣簡單:與字典相同,只是增加了open和close調用。
2、pickle用於python特有的類型和python的資料類型間進行轉換,是python專屬的
3、json用於字串和python資料類型間進行轉換,所有程式語言都可用。
Python 常用模組續