logging 模塊有 5 個日誌級別,
分別爲:debug()、info()、warning、error()、critical()
2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts import logging #一、生成 logger 對象 logger = logging.getLogger('access') logger.setLevel(logging.DEBUG) #二、生成 handler 對象 ch = logging.StreamHandler() ch.setLevel(logging.ERROR) #設置輸出屏幕級別 fh = logging.FileHandler('access.log') #生成文件 fh.setLevel(logging.ERROR) #設置輸出文件級別 #2.一、把 handler 對象 綁定到 logger logger.addHandler(ch) logger.addHandler(fh) #三、生成 formatter 對象 #3.一、把 formatter 對象 綁定到 handler file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(lineno)d - %(message)s') ch.setFormatter(console_formatter) fh.setFormatter(file_formatter) #進行打印日誌 logger.error("account [1234] too many login attempts")
首先,json、pickle、shelve 都是序列化工具; 1.json模塊,用於字符串 和 python數據類型間進行轉換(提供了四個功能:dumps、dump、loads、load) 優勢:跨語言、體積小 缺點:只能支持int\str\list\tuple\dict 2.pickle模塊,用於python特有的類型 和 python的數據類型間進行轉換(提供了四個功能:dumps、dump、loads、load) 優勢:專爲python設計,支持python全部的數據類型 缺點:只能在python中使用,存儲數據佔空間大 3.shelve模塊是一個簡單的k,v將內存數據經過文件持久化的模塊,能夠持久化任何pickle可支持的python數據格式。 使用方式: json和pickle用法相同: import pickle data = {'k1':123,'k2':'Hello'} # pickle.dumps 將數據經過特殊的形式轉換位只有python語言認識的字符串 p_str = pickle.dumps(data) print(p_str) import json # json.dumps 將數據經過特殊的形式轉換位全部程序語言都認識的字符串 j_str = json.dumps(data) print(j_str) shelve是f = shelve.open('shelve_test')
序列化是指把內存裏的數據類型轉變成字符串,以使其能存儲到硬盤或經過網絡傳輸到遠程,由於硬盤或網絡傳輸時只能接受bytes。
三種執行命令的方法: 1.subprocess.run(*popenargs, input=None, timeout=None, check=False, **kwargs) #官方推薦 2.subprocess.call(*popenargs, timeout=None, **kwargs) #跟上面實現的內容差很少,另外一種寫法 3.subprocess.Popen() #上面各類方法的底層封裝
1.可讀性高: 不熟悉這個項目的代碼的人,一眼就能看懂目錄結構,知道程序啓動腳本是哪一個,測試目錄在哪兒,配置文件在哪兒等等。從而很是快速的瞭解這個項目。
2.可維護性高: 定義好組織規則後,維護者就能很明確地知道,新增的哪一個文件和代碼應該放在什麼目錄之下。這個好處是,隨着時間的推移,代碼/配置的規模增長,項目結構不會混亂,仍然可以組織良好。
import sys print(sys.argv[1])
''' Linux當前目錄/usr/local/nginx/html/ 文件名:index.html ''' import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(index.html))) print(BASE_DIR)
/usr/local/nginx
獲取路徑名:os.path.dirname()
得到絕對路徑: os.path.abspath()
[DEFAULT] [client] port = 3306 socket = /data/mysql_3306/mysql.sock [mysqld] explicit_defaults_for_timestamp = true port = 3306 socket = /data/mysql_3306/mysql.sock back_log = 80 basedir = /usr/local/mysql tmpdir = /tmp datadir = /data/mysql_3306 default-time-zone = '+8:00'
import configparser config = configparser.ConfigParser() config.read('my.cnf') config.set('mysqld','default-time-zone','+00:00') config.write(open('my.cnf', "w")) print(config['mysqld']['default-time-zone'] )
import configparser config = configparser.ConfigParser() config.read('my.cnf') config.remove_option('mysqld','explicit_defaults_for_timestamp') config.write(open('my.cnf', "w"))
import configparser config = configparser.ConfigParser() config.read('my.cnf') config.set('DEFAULT','character-set-server','utf8') config.write(open('my.cnf', "w"))
import random import string a = ''.join(random.sample(string.ascii_lowercase + string.ascii_uppercase + string.digits,6)) print(a)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>luffycity.com</title> </head> <body> </body> </html>
import re f = open('index.html','r',encoding='utf-8') data = f.read() print(re.findall('luffycity.com',data))
{"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
import json import time username = input(‘請輸入用戶名(文件名):‘) f = open(‘1234.json‘,‘r‘,encoding=‘utf-8‘) data = f.read() data1 = json.loads(data) #print(data1[‘password‘]) count = 0 while count < 3: if (int(time.strftime(‘%Y‘)))-(int(data1["expire_date"][0:4])) > 0: print(‘您的帳戶已過時‘) exit() if data1[‘status‘] == 1: print(‘您的帳戶已被鎖定,沒法登陸‘) exit() password = input(‘請輸入密碼:‘) if password == data1[‘password‘]: print(‘登陸成功‘) elif count == 2: data1[‘status‘] = 1 f1 = open(‘1234.json‘,‘w‘,encoding=‘utf-8‘) json.dump(data1,f1) #修改json數據 print(‘您的帳戶已被鎖定‘) exit() else: print(‘您的密碼有誤,請從新輸入‘) count += 1
password = input(‘請輸入密碼:‘) m = hashlib.md5() m.update(password.encode()) if m.hexdigest() == data1[‘password‘]: print(‘登陸成功‘)