1. time模塊

import time
*一*#時間戳--》結構化時間--》格式化的字串時間
-----------------------------------------------------------------------------
res1=time.localtime(654126574)
print(res1 )
#res1====time.struct_time(tm_year=1990, tm_mon=9, tm_mday=24, tm_hour=5, tm_min=49, tm_sec=34, tm_wday=0, tm_yday=267, tm_isdst=0)
-----------------------------------------------------------------------------
res2=time.strftime('%Y-%m-%d %H:%M:%S',res1)
print(res2)
#res2=====1990-09-24 05:49:34
----------------------------------------------------------------------------
*二*#格式化的字串時間--》結構化時間--》時間戳
res1=time.strptime('1990-09-24 05:49:34','%Y-%m-%d %H:%M:%S')
print(res1)
#res1====time.struct_time(tm_year=1990, tm_mon=9, tm_mday=24, tm_hour=5, tm_min=49, tm_sec=34, tm_wday=0, tm_yday=267, tm_isdst=-1)
----------------------------------------------------------------------
res2=time.mktime(res1)
print(res2)
#res2=====654126574.0
三#時間加減
import datetime
print(datetime.datetime.now()) #回傳系統當前時間格式為2021-08-16 15:11:49.477146
print(datetime.date.fromtimestamp(time.time()) ) # 時間戳直接轉成日期格式 2021-08-16
print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #當前時間-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當前時間+3小時
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #當前時間+30分
c_time = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #時間替換
2.radom模塊
import random
print(random.random())#(0,1)----float 大于0且小于1之間的小數
print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之間的整數
print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之間的整數 顧頭不顧尾range
print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5] 串列隨機選一個
print(random.sample([1,'23',[4,5]],2))#串列元素任意2個組合 串列隨機選倆
print(random.uniform(1,3))#大于1小于3的小數,如1.927109612082716
item=[1,3,5,7,9]
random.shuffle(item) #打亂item的順序,相當于"洗牌" 隨機排序
print(item)
####補充知識 print(ord(90))=Z 數字轉換阿斯克碼
# chr('A')字符轉換數字
#生成亂數0-9或者A-Z
def make_radom(k):
dic=''
for i in range(k):
s1=str(random.randint(0,9))
s2=chr(random.randint(65,90))
dic += random.choice([s1,s2])
return dic
print(make_radom(4))
3.OS模塊
os.getcwd() #獲取當前作業目錄,即當前python腳本作業的目錄路徑
os.chdir("dirname") #改變當前腳本作業目錄;相當于shell下cd
os.curdir 回傳當前目錄: ('.')
os.pardir 獲取當前目錄的父目錄字串名:('..')
os.makedirs('dirname1/dirname2') 可生成多層遞回目錄
os.removedirs('dirname1') 若目錄為空,則洗掉,并遞回到上一級目錄,如若也為空,則洗掉,依此類推
os.mkdir('dirname') 生成單級目錄;相當于shell中mkdir dirname
os.rmdir('dirname') 洗掉單級空目錄,若目錄不為空則無法洗掉,報錯;相當于shell中rmdir dirname
os.listdir('dirname') 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,并以串列方式列印
os.remove() 洗掉一個檔案
os.rename("oldname","newname") 重命名檔案/目錄
os.stat('path/filename') 獲取檔案/目錄資訊
os.sep 輸出作業系統特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用于分割檔案路徑的字串 win下為;,Linux下為:
os.name 輸出字串指示當前使用平臺,win->'nt'; Linux->'posix'
os.system("bash command") 運行shell命令,直接顯示
os.environ 獲取系統環境變數
os.path.abspath(path) 回傳path規范化的絕對路徑
os.path.split(path) 將path分割成目錄和檔案名二元組回傳
os.path.dirname(path) 回傳path的目錄,其實就是os.path.split(path)的第一個元素
os.path.basename(path) 回傳path最后的檔案名,如何path以/或\結尾,那么就會回傳空值,
即os.path.split(path)的第二個元素
os.path.exists(path) 如果path存在,回傳True;如果path不存在,回傳False path可以是檔案也可以是檔案夾
os.path.isabs(path) 如果path是絕對路徑,回傳True
os.path.isfile(path) #如果path是一個存在的檔案,回傳True,否則回傳False path只可以是檔案
os.path.isdir(path) #如果path是一個存在的目錄,則回傳True,否則回傳False path只可以是檔案夾
os.path.join(path1[, path2[, ...]]) # 將多個路徑組合后回傳,第一個絕對路徑之前的引數將被忽略
os.path.getatime(path) 回傳path所指向的檔案或者目錄的最后存取時間
os.path.getmtime(path) 回傳path所指向的檔案或者目錄的最后修改時間
os.path.getsize(path) 回傳path的大小
4.sys模塊
sys.argv #命令列引數List,第一個元素是程式本身路徑
sys.exit(n) 退出程式,正常退出時exit(0)
sys.version 獲取Python解釋程式的版本資訊
sys.maxint 最大的Int值
sys.path # 回傳模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform 回傳作業系統平臺名稱
5.shutil模塊
shutil.copyfileobj(fsrc, fdst[, length])
將檔案內容拷貝到另一個檔案中
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
shutil.copyfile(src, dst)
拷貝檔案
shutil.copyfile('f1.log', 'f2.log') #目標檔案無需存在
shutil.copymode(src, dst)
僅拷貝權限,內容、組、用戶均不變
shutil.copymode('f1.log', 'f2.log') #目標檔案必須存在
shutil.copystat(src, dst)
僅拷貝狀態的資訊,包括:mode bits, atime, mtime, flags
shutil.copystat('f1.log', 'f2.log') #目標檔案必須存在
shutil.copy(src, dst)
拷貝檔案和權限
import shutil
shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst)
拷貝檔案和狀態資訊
import shutil
shutil.copy2('f1.log', 'f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
遞回的去拷貝檔案夾
import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目標目錄不能存在,
注意對folder2目錄父級目錄要有可寫權限,ignore的意思是排除
拷貝軟連接
shutil.rmtree(path[, ignore_errors[, one rror]])
遞回的去洗掉檔案
import shutil
shutil.rmtree('folder1')
shutil.move(src, dst)
遞回的去移動檔案,它類似mv命令,其實就是重命名,
import shutil
shutil.move('folder1', 'folder3')
壓縮打包檔案
import shutil # 打包這個檔案夾
ret = shutil.make_archive('./xxx', 'gztar', root_dir=r'G:\pycharmproject\ATM')
解壓
import tarfile
t=tarfile.open("xxx.tar.gz",'r') #解壓的檔案
t.extractall(r'G:\pycharmproject\day14\aaa') #解壓完放在這
t.close()
6.json&pickle模塊
序列化
- 記憶體中的資料型別------序列化-------》格式
- 記憶體中的資料型別《------反序列化-------格式
作用:
- 存檔---》pickle
- 跨平臺互動資料---》json
# =====================================>json兼容所有語言,但是不支持所有的python資料型別
#
# ====================> dumps--->loads
import json
str_json = json.dumps({"x":1,'y':2,'z':True,'a':None})
print(str_json) #{"x": 1, "y": 2, "z": true, "a": null}
dic = json.loads(str_json)
print(dic) #{'x': 1, 'y': 2, 'z': True, 'a': None}
# ====================> dump--->load
import json
dumps loads 操作的是字串型別
直接寫到a.json里面
json.dump({"x":1,'y':2,'z':True,'a':None},open('a.json',mode='wt',encoding='utf-8'))
讀出來一句話搞定
dic = json.load(open('a.json',mode='rt',encoding='utf-8'))
print(dic)
dump load 操作的是字典型別
=====================================> pickle只適用于python,但是可以支持所有python的資料型別
# ====================> dumps--->loads
import pickle
res_pkl = pickle.dumps({"x":1,'y':2,'z':True,'a':None})
print(res_pkl)
dic = pickle.loads(res_pkl)
print(dic)
# ====================> dump--->load
import pickle
pickle.dump({"x":1,'y':2,'z':True,'a':None},open('a.pkl',mode='wb'))
dic = pickle.load(open('a.pkl',mode='rb'))
print(dic)
import pickle
import json
# Python學習交流群:711312441
# res = pickle.dumps({1,2,3,4,5,6})
res = json.dumps({1,2,3,4,5,6})
print(res)
7. shelve模塊
shelve模塊比pickle模塊簡單,只有一個open函式,回傳類似字典的物件,可讀可寫;key必須為字串,而值可以是python所支持的資料型別
import shelve
f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'}
print(f['stu1_info']['hobby'])
f.close()
8.xml模塊
xml是實作不同語言或程式之間進行資料交換的協議,跟json差不多,但json使用起來更簡單,不過,古時候,在json還沒誕生的黑暗年代,大家只能選擇用xml呀,至今很多傳統公司如金融行業的很多系統的介面還主要是xml,
9. configparser模塊
[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31
[section2]
k1 = v1
import configparser
config=configparser.ConfigParser()
config.read('a.cfg')
#查看所有的標題
res=config.sections() #['section1', 'section2']
print(res)
#查看標題section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
#查看標題section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
#查看標題section1下user的值=>字串格式
val=config.get('section1','user')
print(val) #egon
#查看標題section1下age的值=>整數格式
val1=config.getint('section1','age')
print(val1) #18
#查看標題section1下is_admin的值=>布林值格式
val2=config.getboolean('section1','is_admin')
print(val2) #True
#查看標題section1下salary的值=>浮點型格式
val3=config.getfloat('section1','salary')
print(val3) #31.0
#改寫
import configparser
config=configparser.ConfigParser()
config.read('a.cfg',encoding='utf-8')
#洗掉整個標題section2
config.remove_section('section2')
#洗掉標題section1下的某個k1和k2
config.remove_option('section1','k1')
config.remove_option('section1','k2')
#判斷是否存在某個標題
print(config.has_section('section1'))
#判斷標題section1下是否有user
print(config.has_option('section1',''))
#Python學習交流群:711312441
#添加一個標題
config.add_section('egon')
#在標題egon下添加name=egon,age=18的配置
config.set('egon','name','egon')
config.set('egon','age',18) #報錯,必須是字串
#最后將修改的內容寫入檔案,完成最終的修改
config.write(open('a.cfg','w'))
10. hashlib模塊
什么叫hash:hash是一種演算法(3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法),該演算法接受傳入的內容,經過運算得到一串hash值
hash值的特點是:
- 只要傳入的內容一樣,得到的hash值必然一樣=====>要用明文傳輸密碼檔案完整性校驗
- 不能由hash值返解成內容=======》把密碼做成hash值,不應該在網路傳輸明文密碼
- 只要使用的hash演算法不變,無論校驗的內容有多大,得到的hash值長度是固定的
11.suprocess模塊
import subprocess
#輸入cmd指令 stdout等于正確管道執行,stderr=錯誤管道執行
obj=subprocess.Popen("tasklist",shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
print(obj)
print(obj.stdout.read().decode('gbk')) #正確執行,都需要解碼指定gbk
print(obj.stderr.read().decode('gbk')) #錯誤執行,都需要解碼指定gbk
12.logging模塊
#level等級設定
CRITICAL = 50 #FATAL = CRITICAL
ERROR = 40
WARNING = 30 #WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0 #不設定
#字典里面主要設定這幾個
logger:產生日志的物件
Filter:過濾日志的物件
Handler:接收日志然后控制列印到不同的地方,FileHandler用來列印到檔案中,StreamHandler用來列印到終端
Formatter物件:可以定制不同的日志格式物件,然后系結給不同的Handler物件使用,以此來控制不同的Handler的日志格式
#formatters里面的列印到螢屏或者檔案設定的引數
%(name)s:Logger的名字,并非用戶名,詳細查看
%(levelno)s:數字形式的日志級別
%(levelname)s:文本形式的日志級別
%(pathname)s:呼叫日志輸出函式的模塊的完整路徑名,可能沒有
%(filename)s:呼叫日志輸出函式的模塊的檔案名
%(module)s:呼叫日志輸出函式的模塊名
%(funcName)s:呼叫日志輸出函式的函式名
%(lineno)d:呼叫日志輸出函式的陳述句所在的代碼行
%(created)f:當前時間,用UNIX標準的表示時間的浮 點數表示
%(relativeCreated)d:輸出日志資訊時的,自Logger創建以 來的毫秒數
%(asctime)s:字串形式的當前時間,默認格式是 “2003-07-08 16:49:45,896”,逗號后面的是毫秒
%(thread)d:執行緒ID,可能沒有
%(threadName)s:執行緒名,可能沒有
%(process)d:行程ID,可能沒有
%(message)s:用戶輸出的訊息
#在settings組態檔里面配置
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'格式1': { #格式物件名字
'format': '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s:%(message)s' #引數
},
'格式2': { #格式物件名字
'format': '%(asctime)s :%(message)s' #引數
},
},
'filters': {},
'handlers': {
'螢屏': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 列印到螢屏
'formatter': '格式2'
},
'檔案': {
'level': 'DEBUG',
'class': 'logging.FileHandler', # 保存到檔案
'formatter': '格式1',
'filename': DESC_dir,
'encoding': 'utf-8',
},
},
'loggers': {
# '交易日志': {
# 'handlers': ['螢屏','檔案'],
# 'level': 'DEBUG',
# 'propagate': False,
# },
'': { #不寫名字找不到的話就指定這個
'handlers': ['螢屏','檔案'],
'level': 'DEBUG',
'propagate': False,
},
},
}
#在lib的common下重寫log方法
import logging.config
from conf import settings
logging.config.dictConfig(settings.LOGGING_DIC)#指定組態檔的字典
def log(msg,name,level='info'): #msg傳進來的文字,name=logger物件名字 level等級
logger = logging.getLogger(name) #獲取logger物件名字 拿著這個名字去組態檔尋找找不到用沒名字那個
if level == 'info':
logger.info(msg) #調方法
elif level == 'debug':
logging.debug(msg)
elif level == 'warn':
logger.warning(msg)
elif level == 'error':
logger.error(msg)
elif level == 'critical':
logger.critical(msg)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539500.html
標籤:其他
