標籤:程式 arc getc 檔案中 logs rect import 絕對路徑 指令碼
os模組(補充中)1.查看當前路徑及切換路徑
>>> import os
>>> os.getcwd() #擷取當前檔案所在的路徑
‘D:\\python\\Lib\\idlelib‘
>>> os.chdir(‘../‘) #切換當上一層目錄,此處可以是相對路徑
>>> os.getcwd()
‘D:\\python\\Lib‘
>>> os.chdir(‘D:\Program Files (x86)‘) #也可以是絕對路徑
>>> os.getcwd()
‘D:\\Program Files (x86)‘
補充:
在pycharm上發現os.getcwd()與os.path.realpath("./")返回的都是.py檔案的絕對路徑,其實不是的,這個目錄並不是指指令碼所在的目錄,而是所運行指令碼的目錄。
實際上os.path.relpath(path[, start]) #從start開始計算相對路徑。
print(__file__)·#返迴文件的相對路徑,包含檔案名稱
os.path.abspath(__file__)#返迴文件的絕對路徑,包含檔案名稱
os.path.dirname(os.path.abspath(__file__))#上一個路徑的檔案名稱所在的目錄,就是當前檔案的上一層
dis_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#再往上一層,可以利用這條,通過import sys; sys.path.append(dis_path),將其加到環境變數中,這樣就可以實現跨路徑調用檔案。
2.查看當前路徑下的檔案是否存在
os.path.exists(‘檔案名稱‘),存在返回True
可以結合上面的切換路徑使用,查看不同路徑下有沒有此檔案
3,替換與重新命名檔案
os.repalce()
replace(*args, **kwargs):
Rename a file or directory, overwriting the destination.
前面檔案用後面檔案名稱替換
os.rename()
用法一樣,但是有個區別
os.replace(f1,f2) #f2如果存在,f1仍然更名為f2,並將f2替換掉
os.rename(f1,f2)#f2如果存在,就報錯
random模組
1 import random2 print(random.random()) #列印一個隨機的float數3 print(random.randint(1,5)) #列印1到5之間隨機的int數,包括1和54 print(random.randrange(1,5)) #列印1到5之間隨機的int數,包括1,不包括5
輸出:
0.370659405830737342
執行個體:產生驗證碼
1 import random 2 checkcode = ‘‘ 3 for i in range(4): 4 current = random.randrange(0,4) 5 if current != i: 6 """chr()返回整數對應的ASCII碼中的英文字母,這裡65-90代表26個大寫字母,97-122返回26個小寫字母。相反,ord(‘a‘)返回字母a在ascii中對應的數字""" 7 temp = chr(random.randint(65,90)) 8 else: 9 temp = random.randint(0,9)10 checkcode += str(temp)11 print(checkcode)
logging模組(補充中)
日誌共有6個層級,由高到低如下:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
1,預設情況下,longging只會講warning以上的層級的日誌列印到螢幕上,包括warning。
import logging
# logging.basicConfig()
logging.debug(‘this is debug‘)
logging.info(‘this is info‘)
logging.warning(‘this is warning‘)
logging.error(‘this is error‘)
logging.critical(‘this is critical‘)
輸出:
WARNING:root:this is warning
ERROR:root:this is error
CRITICAL:root:this is critical
2.通過logging.basicConfig函數對日誌的輸出格式及方式做相關配置
import logging
logging.basicConfig(filename=‘log.log‘,
format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,
datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
level=10)
logging.debug(‘this is debug‘)
logging.info(‘this is info‘)
logging.warning(‘this is warning‘)
logging.error(‘this is error‘)
logging.critical(‘this is critical‘)
會產生一個log.log的檔案,並將日誌追加到檔案中:預設是追加。
如下:
2017-05-25 18:09:13 PM - root - DEBUG -logging mod: this is debug
2017-05-25 18:09:13 PM - root - INFO -logging mod: this is info
2017-05-25 18:09:13 PM - root - WARNING -logging mod: this is warning
2017-05-25 18:09:13 PM - root - ERROR -logging mod: this is error
2017-05-25 18:09:13 PM - root - CRITICAL -logging mod: this is critical
?
logging.basicConfig函數各參數:
filename: 指定記錄檔名
filemode: 和file函數意義相同,指定記錄檔的開啟模式,‘w‘或‘a‘
format: 指定輸出的格式和內容,format可以輸出很多有用資訊,如上例所示:
%(levelno)s: 列印記錄層級的數值
%(levelname)s: 列印記錄層級名稱
%(pathname)s: 列印當前執行程式的路徑,其實就是sys.argv[0]
%(filename)s: 列印當前執行程式名
%(funcName)s: 列印日誌的當前函數
%(lineno)d: 列印日誌的當前行號
%(asctime)s: 列印日誌的時間
%(thread)d: 列印線程ID
%(threadName)s: 列印線程名稱
%(process)d: 列印進程ID
%(message)s: 列印日誌資訊
datefmt: 指定時間格式,同time.strftime()
level: 設定記錄層級,預設為logging.WARNING
stream: 指定將日誌的輸出資料流,可以指定輸出到sys.stderr,sys.stdout或者檔案,預設輸出到sys.stderr,當stream和filename同時指定時,stream被忽略
以上日誌模組參考:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html
python學習-常用模組-os,random,logging