configparser模塊 生成配置文件python
1,生成配置文檔windows
configparse
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '45',
'Compression': 'yes',
'CompressionLevel': '9',
'ForwardX11':'yes'
}
config['bitbucket.org'] = {'User':'hg'}
config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
with open('example.ini', 'w') as f:
config.write(f)
2,查找ide
import configparser
config = configparser.ConfigParser()
#---------------------------查找文件內容,基於字典的形式
#下面的語句請一塊一塊的使用,即將其它塊的註釋掉。
print(config.sections()) #>>>[] #什麼都拿不到,由於沒指定讀什麼文件,可是不會報錯
config.read('example.ini') # 讀取文件
print(config.sections()) #>>>['bitbucket.org', 'topsecret.server.com'] # 獲取全部的組,「default」組比較特別是不會顯示的。
print('bytebong.com' in config) # False #查看組是否在這個文件裏面
print('bitbucket.org' in config) # True
print(config['bitbucket.org']["user"]) # hg #拿bitbucket.org組的user項
print(config['DEFAULT']['Compression']) #yes
print(config['topsecret.server.com']['ForwardX11']) #no
print(config['bitbucket.org']) #<Section: bitbucket.org> #打印bitbucket.org的地址
for key in config['bitbucket.org']: #打印組內全部的鍵, # 注意,有default會默認打印default的鍵,並且無論經過那個組都能使用default的項
print(key)
print(config.options('bitbucket.org')) # 同for循環,找到'bitbucket.org'下全部鍵
print(config.items('bitbucket.org')) #找到'bitbucket.org'下全部鍵值對
print(config.get('bitbucket.org','compression')) # yes # get方法Section下的key對應的value
3,增刪改操做函數
import configparser
config = configparser.ConfigParser()
config.read('example.ini')
config.add_section('yuan') #增長一個yuan組
config.remove_section('bitbucket.org') #刪除一個section
config.remove_option('topsecret.server.com',"forwardx11") # 刪除一個配置項
config.set('topsecret.server.com','k1','11111') # 修改配置項,修改完還要寫入。
config.set('yuan','k2','22222')
# f = open('new2.ini', "w")
# config.write(f) # 寫進新文件,由於文件事實上是不能修改的
# f.close()
logging模塊 日誌編碼
1,什麼叫日誌?spa
日誌 用來記錄用戶行爲 或者 代碼的執行過程線程
# login 登陸
# log 日誌
# logging 日誌debug
logging 做用日誌
# 我可以「一鍵」控制
# 排錯的時候須要打印不少細節來幫助我排錯
# 嚴重的錯誤記錄下來
# 有一些用戶行爲 有沒有錯都要記錄下來code
2,有四個級別
import logging
logging.debug('debug message') # 排錯信息 # 低級別的
logging.info('info message') # 正常信息
logging.warning('warning message') # 警告信息
logging.error('error message') # 錯誤信息
logging.critical('critical message') # 嚴重錯誤信息 # 高級別的
默認狀況下Python的logging模塊將日誌打印到了標準輸出中,且只顯示了大於等於WARNING級別的日誌,這說明默認的日誌級別設置爲WARNING(日誌級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG),默認的日誌格式爲「日誌級別:Logger名稱:用戶輸出消息」。
3,配置
import logging
logging.basicConfig(level=logging.DEBUG, #「level=logging.DEBUG」 表示顯示DEBUG級別及以上級別的內容。
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #配置參數 # 格式化輸出 print('%(key)s'%{'key':'value'}) # print('%s'%('key','value'))
datefmt='%a, %d %b %Y %H:%M:%S', # 時間格式
filename='test.log', #往文件裏寫 #去掉這兩句,就輸出到控制檯。
filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
3.1.2,配置參數
1 logging.basicConfig()函數中可經過具體參數來更改logging模塊默認行爲,可用參數有: 2
3 filename:用指定的文件名建立FiledHandler,這樣日誌會被存儲在指定的文件中。 4 filemode:文件打開方式,在指定了filename時使用這個參數,默認值爲「a」還可指定爲「w」。 5 format:指定handler使用的日誌顯示格式。 6 datefmt:指定日期時間格式。 7 level:設置rootlogger(後邊會講解具體概念)的日誌級別 8 stream:用指定的stream建立StreamHandler。能夠指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認爲sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。 9
10 format參數中可能用到的格式化串: 11 %(name)s Logger的名字 12 %(levelno)s 數字形式的日誌級別 13 %(levelname)s 文本形式的日誌級別 14 %(pathname)s 調用日誌輸出函數的模塊的完整路徑名,可能沒有 15 %(filename)s 調用日誌輸出函數的模塊的文件名 16 %(module)s 調用日誌輸出函數的模塊名 17 %(funcName)s 調用日誌輸出函數的函數名 18 %(lineno)d 調用日誌輸出函數的語句所在的代碼行 19 %(created)f 當前時間,用UNIX標準的表示時間的浮 點數表示 20 %(relativeCreated)d 輸出日誌信息時的,自Logger建立以 來的毫秒數 21 %(asctime)s 字符串形式的當前時間。默認格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒 22 %(thread)d 線程ID。可能沒有 23 %(threadName)s 線程名。可能沒有 24 %(process)d 進程ID。可能沒有 25 %(message)s用戶輸出的消息
3.1.3,basicconfig 在可能錯誤的地方進行記錄。
import logging
logging.basicConfig(level=logging.DEBUG, #「level=logging.DEBUG」 表示顯示DEBUG級別及以上級別的內容。
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #配置參數 # 格式化輸出 print('%(key)s'%{'key':'value'}) # print('%s'%('key','value'))
datefmt='%a, %d %b %Y %H:%M:%S', # 時間格式
filename='test.log', #往文件裏寫 #去掉這兩句,就輸出到控制檯。
filemode='w')
try:
int(input('num >>'))
except ValueError:
logging.error('輸入的值不是一個數字')
# 可是basicconfig記錄的日誌編碼格式有問題,在文件中不能顯示中文但在控制檯沒問題。
3.4,logger對象配置
import logging
#建立一個logger對象,管智能輸出
logger = logging.getLogger()
# 建立一個handler,用於寫入日誌文件
fh = logging.FileHandler('test.log',encoding='utf-8')
# 再建立一個handler,用於輸出到控制檯
ch = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter) # 文件操做符 和 格式關聯
ch.setFormatter(formatter)
logger.addHandler(fh) #logger對象能夠添加多個fh和ch對象
logger.addHandler(ch) # logger 對象 和 文件操做符 關聯
logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')