常用的模塊

1.time绘闷、datetime 時間模塊
2.random 隨機模塊
3.os 與操作系統(tǒng)交互的一個接口
4.sys 與python解釋器交互的一個接口
5.json 序列化模塊
6.hashlib 可以用來加密
7.re 正則匹配模塊
8.loggin 日志模塊

一、time和datetime模塊

time模塊有三種表現(xiàn)形式: 時間戳\格式化時間字符串\時間原則

#導入時間模塊
>>>import time

#時間戳
>>>time.time()
1500875844.800804

#時間字符串
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 13:54:37'
>>>time.strftime("%Y-%m-%d %H-%M-%S")
'2017-07-24 13-55-04'

#時間元組:localtime將一個時間戳轉(zhuǎn)換為當前時區(qū)的struct_time
time.localtime()
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37, 
                 tm_wday=0, tm_yday=205, tm_isdst=0)

小結(jié):時間戳是計算機能夠識別的時間较坛;時間字符串是人能夠看懂的時間印蔗;元組則是用來操作時間的


時間格式的轉(zhuǎn)化
#時間戳-->結(jié)構(gòu)化時間
#time.gmtime(時間戳)    #UTC時間,與英國倫敦當?shù)貢r間一致
#time.localtime(時間戳) #當?shù)貢r間丑勤。例如我們現(xiàn)在在北京執(zhí)行這個方法:與UTC時間相差8小時华嘹,UTC時間+8小時 = 北京時間 
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)

#結(jié)構(gòu)化時間-->時間戳 
#time.mktime(結(jié)構(gòu)化時間)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0

#結(jié)構(gòu)化時間-->字符串時間
#time.strftime("格式定義","結(jié)構(gòu)化時間")  結(jié)構(gòu)化時間參數(shù)若不傳,則現(xiàn)實當前時間
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 14:55:36'
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
'2017-07-14'

#字符串時間-->結(jié)構(gòu)化時間
#time.strptime(時間字符串,字符串對應格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)

其他用法

time.sleep(3)  # 推遲3 秒

二法竞、random模塊

import random
#隨機小數(shù)
>>> random.random()      # 大于0且小于1之間的小數(shù)
0.7664338663654585
>>> random.uniform(1,3) #大于1小于3的小數(shù)
1.6270147180533838

#隨機整數(shù)
>>> random.randint(1,5)  # 大于等于1且小于等于5之間的整數(shù)
>>> random.randrange(1,10,2) # 大于等于1且小于10之間的奇數(shù)


#隨機選擇一個返回
>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
#隨機選擇多個返回耙厚,返回的個數(shù)為函數(shù)的第二個參數(shù)
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2個組合
[[4, 5], '23']


#打亂列表順序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打亂次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]

生成隨機驗證碼

# 手機版
import random
s = ''
for i in range(6):
    num = str(random.randint(0,9))  # 0 - 9 之間的隨機整數(shù)轉(zhuǎn)化 str
    s += num    # 字符串拼接
print(s)

# 網(wǎng)頁版
import random
ret = ''
for i in range(6):
    num = str(random.randint(0,9))
    a_num = random.randint(97,122) # ascii : a - z
    a_num2 = random.randint(65,90) # ascii : A - Z
    apha = chr(a_num)              # 將 ascii :數(shù)字轉(zhuǎn)化為字母
    apha2 = chr(a_num2)            # 將 ascii :數(shù)字轉(zhuǎn)化為字母
    ret += random.choice([num,apha,apha2])    # 在數(shù)字小字母强挫,大字母,隨機選擇一個返回
                                              # 然后將字符串拼接起來
print(ret)

三颜曾、OS模塊

這是一個與操作系統(tǒng)交互的接口

  1. 獲取和修改當前工作目錄
  2. 創(chuàng)建或刪除文件、文件夾
  3. 查看不同操作系統(tǒng)的一些符號
  4. 執(zhí)行操作系統(tǒng)的命令
  5. 跨平臺操作目錄
    6.計算文件大小


    圖1

    圖2

    圖3

四秉剑、sys模塊

五泛豪、json模塊

序列化模塊: 將原本的字典、列表等內(nèi)容轉(zhuǎn)化成一個字符串的過程就叫序列化侦鹏,

為什么序列化
1.要固態(tài)的儲存一個數(shù)據(jù)結(jié)構(gòu)
2.要在網(wǎng)絡(luò)上傳輸一個數(shù)據(jù)結(jié)構(gòu)
3.是程序更具有維護性

json提供了四個方法: dumps诡曙、dump、loads略水、load

字典价卤、列表、元祖(返回列表,因為他是被當做列表序列化的)
數(shù)據(jù)結(jié)構(gòu) ---> json dumps
json ---> 數(shù)據(jù)結(jié)構(gòu) loads

import json

dic = {"k":"v"}       # 字典
print(dic,type(dic))
print(json.dumps(dic),type(json.dumps(dic)))
s = json.dumps(dic)
print(json.loads(s),type(json.loads(s)))

li = [1,2,3,4]        # 列表
print(dic,type(li))
print(json.dumps(li),type(json.dumps(li)))
s = json.dumps(li)
print(json.loads(s),type(json.loads(s)))

li = [1,'asd',[1,2,3,4],{'name':'alex','age':56}]  # 可以嵌套其他類型數(shù)據(jù)
print(json.dumps(li),type(json.dumps(li)))
s = json.dumps(li)
print(json.loads(s),type(json.loads(s)))

tu = (1,2,3,4)  # 元組 返回列表
print(tu,type(tu))
print(json.dumps(tu),type(json.dumps(tu)))
s = json.dumps(tu)
print(json.loads(s),type(json.loads(s)))

# 元組和list 非常像渊涝,元組是作為一個list 被序列化的慎璧,所以轉(zhuǎn)回來以后只能轉(zhuǎn)成一個列表

文件的讀和寫

dic = {"k":"v"}
# 將字典寫入文件
with open('a1.txt','w')as f:json.dump(dic,f)

# 文件中的內(nèi)容:
{"k": "v"}     # str

# 從文件中取讀字典
with open('a1.txt') as f1: print(json.load(f1))
{'k': 'v'}

六、hashlib模塊

1跨释、什么叫hash:hash是一種算法(這里代替了md5模塊和sha模塊胸私,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法)鳖谈,該算法接受傳入的內(nèi)容岁疼,經(jīng)過運算得到一串hash值
2、hash值的特點是:
1 只要傳入的內(nèi)容一樣缆娃,得到的hash值必然一樣=====>要用明文傳輸密碼文件完整性校驗
2 不能由hash值返解成內(nèi)容=======》把密碼做成hash值捷绒,不應該在網(wǎng)絡(luò)傳輸明文密碼

3 只要使用的hash算法不變,無論校驗的內(nèi)容有多大贯要,得到的hash值長度是固定的

import hashlib
 
m=hashlib.md5()# m=hashlib.sha256()
 
m.update('hello'.encode('utf8'))
print(m.hexdigest())  #5d41402abc4b2a76b9719d911017c592
 
m.update('alvin'.encode('utf8'))
 
print(m.hexdigest())  #92a7e713c30abbb0319fa07da2a5c4af
 
m2=hashlib.md5()
m2.update('helloalvin'.encode('utf8'))
print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af

'''
注意:把一段很長的數(shù)據(jù)update多次暖侨,與一次update這段長數(shù)據(jù),得到的結(jié)果一樣
但是update多次為校驗大文件提供了可能崇渗。
'''

以上加密算法雖然依然非常厲害它碎,但時候存在缺陷,即:通過撞庫可以反解显押。所以扳肛,有必要對加密算法中添加自定義key再來做加密。
 
hash = hashlib.sha256('898oaFs09f'.encode('utf8'))
hash.update('alvin'.encode('utf8'))
print (hash.hexdigest())#e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7

模擬撞庫

import hashlib
passwds=[
    'alex3714',
    'alex1313',
    'alex94139413',
    'alex123456',
    '123456alex',
    'a123lex',
    ]
def make_passwd_dic(passwds):
    dic={}
    for passwd in passwds:
        m=hashlib.md5()
        m.update(passwd.encode('utf-8'))
        dic[passwd]=m.hexdigest()
    return dic

def break_code(cryptograph,passwd_dic):
    for k,v in passwd_dic.items():
        if v == cryptograph:
            print('密碼是===>\033[46m%s\033[0m' %k)

cryptograph='aee949757a2e698417463d47acac93df'
break_code(cryptograph,make_passwd_dic(passwds))

模擬撞庫破解密碼

七乘碑、re模塊

八挖息、loggin模塊

這是一個日志模塊
應用場景:

  1. 程序調(diào)試
  2. 了解軟件程序運行情況,是否正常
  3. 軟件程序運行故障分析與問題定位
    但是在開發(fā)供別人使用的庫時,不推薦,因為會引起日志的混亂
import logging

logging.debug('debug message')        # 程序里的調(diào)試消息兽肤。
logging.info('info message')          # 獲取消息
logging.warning('warning message')    # 報警信息
logging.error('error message')        # 錯誤信息
logging.critical('critical message')  # 臨界信息
                                       從上到下 越來越嚴重
 默認情況下Python的logging模塊將日志打印到了標準輸出中套腹,且只顯示了大于等于warning級別的日志绪抛,這說明默認的日志級別設(shè)置為warning(日志級別等級critical > error > warning > info > debug)

調(diào)用loggin

import logging

logger = logging.getLogger()
# 創(chuàng)建一個handler,用于寫入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8') 

# 再創(chuàng)建一個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.debug('logger debug message') 
logger.info('logger info message') 
logger.warning('logger warning message') 
logger.error('logger error message') 
logger.critical('logger critical message')

在django項目中的應用

# 控制臺打印日志
BASE_LOG_DIR = os.path.join(BASE_DIR, "log")    注意要存在 log 文件夾用于記錄錯誤信息
LOGGING = {
    'version': 1,  #(版本) 保留的關(guān)鍵字幢码,暫時沒有用,以后可能有用
    'disable_existing_loggers': False,  #(禁用現(xiàn)有記錄器) 不禁用已經(jīng)存在的logger實例
    'formatters': {  # 定義的日志的格式
        'standard': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                      '[%(levelname)s][%(message)s]'
        },
        'simple': {
            'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
        },
        'collect': {
            'format': '%(message)s'
        }
    },  # (格式程序)
    'filters': {
        'require_debug_true': {  # 過濾日志的配置項
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },      # ( 過濾器 )
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],  # 只有在Django debug為True時才在屏幕打印日志
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'SF': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件尖飞,根據(jù)文件大小自動切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 3,  # 備份數(shù)為3  xx.log --> xx.log.1 --> xx.log.2 --> xx.log.3
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 'TF': {
        #     'level': 'INFO',
        #     'class': 'log.handlers.TimedRotatingFileHandler',  # 保存到文件症副,根據(jù)時間自動切
        #     'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件
        #     'backupCount': 3,  # 備份數(shù)為3  xx.log --> xx.log.2018-08-23_00-00-00 --> xx.log.2018-08-24_00-00-00 --> ...
        #     'when': 'D',  # 每天一切, 可選值有S/秒 M/分 H/小時 D/天 W0-W6/周(0=周一) midnight/如果沒指定時間就默認在午夜
        #     'formatter': 'standard',
        #     'encoding': 'utf-8',
        # },
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件政基,自動切
            'filename': os.path.join(BASE_LOG_DIR, "bms_info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 500,  # 日志大小 500M
            'backupCount': 3,  # 最多保存多少個日志文件
            'formatter': 'standard',
            'encoding': 'utf-8',  # 寫日志文件的編碼格式
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件贞铣,自動切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        'collect': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自動切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'collect',
            'encoding': "utf-8"
        }
    },      # ( 處理程序 )
    'loggers': {
        '': {  # 默認的logger應用如下配置
            'handlers': ['SF', 'console', 'error'],  # 上線之后可以把'console'移除
            'level': 'DEBUG',
            'propagate': True,
        },
        'collect': {  # 名為 'collect'的logger還單獨處理
            'handlers': ['console', 'collect'],
            'level': 'INFO',
        }
    },  # ( 記錄器 )
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沮明,一起剝皮案震驚了整個濱河市辕坝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荐健,老刑警劉巖酱畅,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異江场,居然都是意外死亡圣贸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門扛稽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吁峻,“玉大人,你說我怎么就攤上這事在张∮煤” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵帮匾,是天一觀的道長啄骇。 經(jīng)常有香客問我,道長瘟斜,這世上最難降的妖魔是什么缸夹? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮螺句,結(jié)果婚禮上虽惭,老公的妹妹穿的比我還像新娘。我一直安慰自己蛇尚,他們只是感情好芽唇,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著取劫,像睡著了一般匆笤。 火紅的嫁衣襯著肌膚如雪研侣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天炮捧,我揣著相機與錄音庶诡,去河邊找鬼。 笑死咆课,一個胖子當著我的面吹牛末誓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播傀蚌,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼基显,長吁一口氣:“原來是場噩夢啊……” “哼蘸吓!你這毒婦竟也來了善炫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤库继,失蹤者是張志新(化名)和其女友劉穎箩艺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宪萄,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡艺谆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拜英。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片静汤。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖居凶,靈堂內(nèi)的尸體忽然破棺而出虫给,到底是詐尸還是另有隱情,我是刑警寧澤侠碧,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布抹估,位于F島的核電站,受9級特大地震影響弄兜,放射性物質(zhì)發(fā)生泄漏药蜻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一替饿、第九天 我趴在偏房一處隱蔽的房頂上張望语泽。 院中可真熱鬧,春花似錦视卢、人聲如沸湿弦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颊埃。三九已至蔬充,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間班利,已是汗流浹背饥漫。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罗标,地道東北人庸队。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像闯割,于是被迫代替她去往敵國和親彻消。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 常用模塊 認識模塊 什么是模塊 什么是模塊? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件谢澈,文...
    go以恒閱讀 1,965評論 0 6
  • 個人原文博客地址: Python中常用的模塊 上一篇文章中記錄了Python中模塊的使用, 這里就是記錄一些常用的...
    TitanCoder閱讀 309評論 0 1
  • random 隨機選取模塊: import random a = [1, 2, 3, 4, 5] print(ra...
    刀客特鹿閱讀 264評論 0 0
  • 卷積神經(jīng)網(wǎng)絡(luò)設(shè)計主要是tensorflow網(wǎng)絡(luò)層的定義和編寫煌贴,本部分可能較多的涉及到相關(guān)函數(shù)的說明。 卷積模塊 卷...
    大地瓜_閱讀 451評論 0 0
  • 1 太惡心了淹朋。 今天,本來想好好過個周末钉答,下班睡個大覺醒過來好好追一下我謙今天的《吐槽大會》础芍。 可就在剛才睡醒那會...
    李蝌蝌閱讀 1,829評論 0 10