1. 程式人生 > >各個模塊整理

各個模塊整理

con admin 不同 blog 存儲 cal 出了 累加 語句

import time

#一 時間戳<---->結構化時間: localtime/gmtime mktime

>>> time.localtime(3600*24)

>>> time.gmtime(3600*24)

>>> time.mktime(time.localtime())

#字符串時間<---->結構化時間: strftimestrptime

>>> time.strftime("%Y-%m-%d %X", time.localtime())

>>> time.strptime("2017-03-16","%Y-%m-%d")

技術分享

★★★★★ ★★★★★

import random

# a=random.random() # 大於0且小於1之間的小數

# print(a)

# a=random.randint(1,5) # 大於等於1且小於等於5之間的整數,即顧頭也顧尾

# print(a)

# a=random.randrange(1,3) # 大於等於1且小於3之間的整數,顧頭不顧尾

# print(a)

# a=random.choice([1,‘23‘,[4,5]]) # #1或者23或者[4,5],隨機取一個,裏面可以是數字,字符串和列表

# print(a)

# a=random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2個組合,隨機取兩個,裏面可以是數字,字符串和列表

# print(a)

# a=random.uniform(1,3) #大於1小於3的小數

# print(a)

# item=[1,3,5,7,9]

# random.shuffle(item) # 打亂次序

# print(item)

★★★★★

import hashlib

# md5 = hashlib.md5()

# md5.update(b‘hello‘) #這裏記得一定要加b,在python3中,在update括號裏面記得加b;

# print(md5.hexdigest()) #update是累加的過程,可以多次被調用,括號內還可是一句話,可看老師博客

# 計算結果如下:

# 5d41402abc4b2a76b9719d911017c592

# md5=hashlib.sha512()

# md5.update(b‘123aaa‘)

# print(md5.hexdigest())

#打印結果為:442c78a39ee20a1bc0912d3f8b85febd198b323b0843c952ac8c968148a59ba033cefcfc0dddf0632291bc3a62baa3bab9ba0b04dccd63570307a83582259fe9

# obj=hashlib.md5(‘salt‘.encode(‘utf-8‘))

# obj.update(b‘admin‘)

# print(obj.hexdigest())

#打印結果為:c657540d5b315892f950ff30e1394480

# obj=hashlib.md5(‘sdfds2134‘.encode(‘utf-8‘))

# obj.update(b‘admin‘) #表明上面還可以隨機寫東西,但是沒有深究,以後用到再說

# print(obj.hexdigest())

#打印結果為:c7621ca3e95c018b3be4d241c229ab24

技術分享

★★★★★

import sys

print(sys.path)

#打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]

#E:\\pythonS5\\june\\模塊整理‘,這個表示會把當前所執行文件的目錄,添加到sys.path裏面

# 重點記住前面的路徑:,前面的是當前所執行文件的目錄,會添加到sys.path裏面,後面的python環境所有的路徑

# a=sys.argv #命令行參數List,第一個元素是程序本身路徑,是一個列表的形式

# a1=sys.argv[0]

# print(a) #打印結果為:[‘E:/pythonS5/june/模塊整理/各種模塊.py‘]

# print(a1) #打印結果為: E:/pythonS5/june/模塊整理/各種模塊.py

# print(111) #這行代碼正常打印執行

# sys.exit(0) #退出程序,正常退出時exit(0) 自己測試了裏面沒有0也能執行,用的時候看情況

# print(112) #次行代碼不會執行,因為上調命令以退出

# a=sys.version # 獲取Python解釋程序的版本信息

# print(a) #打印結果為:所用的python的版本信息,3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]

# print(sys.path)#打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘]

# b_dir=r‘E:\pythonS5\July‘ #這裏r寫不寫,都能實現,這個效果,因不知道啥時候需要加r,所以一直就用著r就行

# sys.path.append(b_dir) #因sys.path是個列表,所以可以用append進行追加,追加進去的路徑,可以調用不同目錄的模塊

# print(sys.path) #打印結果為:[‘E:\\pythonS5\\june\\模塊整理‘, ‘E:\\pythonS5‘, ‘D:\\python3.6.1\\python36.zip‘, ‘D:\\python3.6.1\\DLLs‘, ‘D:\\python3.6.1\\lib‘, ‘D:\\python3.6.1‘, ‘D:\\python3.6.1\\lib\\site-packages‘, ‘E:\\pythonS5\\june‘]

#很明顯已經把‘E:\\pythonS5\\July‘這個路徑加入到當前的環境變量下面了。

# a=sys.platform # 返回操作系統平臺名稱

# print(a) #打印結果為:win32

# ★★★★★

# ★★★★★

import logging #日誌模塊

# 下面5個級別,越往下越高

# logging.debug(‘debug message‘)

# logging.info(‘info message‘)

# logging.warning(‘warning message‘)

# logging.error(‘error message‘)

# logging.critical(‘critical message‘)

# logging.basicConfig(level=logging.DEBUG,

# format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,

# filename=‘log.txt‘, #在當前路徑下直接選擇的是相對路徑,也可以選擇絕對路徑,因此會在當前路徑下產生一個log的文件

# filemode=‘a‘,) #a表示:追加,也可用w表示:寫,即可追加到或寫入這個文件中。

# logging.debug(‘debug message‘)

# logging.info(‘info message‘)

# logging.warning(‘warning message‘)

# logging.error(‘error message‘)

# logging.critical(‘critical message‘)

#就這樣,就把上面的信息追加到log.txt文件裏面了

#下面這些參數都是關鍵字的,都是固定的, 不可修改,用那個,就使用那個就行

# logging.basicConfig()函數中可通過具體參數來更改logging模塊默認行為,可用參數有:

# filename:用指定的文件名創建FiledHandler,這樣日誌會被存儲在指定的文件中。

# filemode:文件打開方式,在指定了filename時使用這個參數,默認值為“a”還可指定為“w”。

# format:指定handler使用的日誌顯示格式。

# datefmt:指定日期時間格式。

# level:設置rootlogger(後邊會講解具體概念)的日誌級別

# stream:用指定的stream創建StreamHandler。可以指定輸出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默認為sys.stderr。若同時列出了filename和stream兩個參數,則stream參數會被忽略。

#

# format參數中可能用到的格式化串:

# %(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用戶輸出的消息

# 另一種方式 是logger對象 相比上面的basicconfig來說,我們推薦使用logger,因為更加靈活,他們兩者地位平等。

# def get_logger():

# logger_obj=logging.getLogger() #獲取這個logger對象

# print(type(logger_obj))

# fh=logging.FileHandler("logger_file.txt")#文件輸出流,創建了一個這個文件

# fh.setLevel(logging.ERROR)

# ch=logging.StreamHandler() #StreamHandler不需要參數

# ch.setLevel(logging.CRITICAL)

#

# formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)

# fh.setFormatter(formatter) #設置成formatter的格式

# ch.setFormatter(formatter) #同上

# logger_obj.addHandler(fh)

# logger_obj.addHandler(ch)

#

# logger_obj.setLevel(logging.DEBUG)#在這裏定義級別

# return logger_obj

#

# logger_obj=get_logger()

#

# logger_obj.info("info")

# logger_obj.error("error")

# logger_obj.warning("warning")

# logger_obj.debug("debug")

# logger_obj.critical("critical")

★★★★★

import json #json裏面老師講課時候說用雙引號,而且序列化之後的結果都是雙引號的

# dic={‘name‘:‘hao‘,‘age‘:11}

# f=open(‘123.txt‘,‘w‘)

# data=json.dumps(dic)

# f.write(data)

# f.close()

#這樣就把字典的信息序列化到123這個文件中了

# f=open(‘123.txt‘,‘r‘)

# data=f.read()

# dic=json.loads(data)

# print(dic) #打印結果為:{‘name‘: ‘wuhao‘, ‘age‘: 11}

#這樣就反序列化出來了

##############

# 上面用的是dumps和loads,下面請看dump和load,比上面更加簡潔

# dic={‘name‘:‘hao‘,‘age‘:11}

# f=open(‘666.txt‘,‘w‘)

# json.dump(dic,f)# 這一步就相當於省略了:data=json.dumps(dic)和f.write(data),直接進行序列化

###上面括號中的dic是要序列化的對象

# f.close()

##下面進行反序列化

# f=open(‘666.txt‘,‘r‘)

# dic=json.load(f)

# print(dic)

★★★★★

##----------------------------序列化

import pickle #和json模塊用法一樣

dic={‘name‘:‘alvin‘,‘age‘:23,‘sex‘:‘male‘}

print(type(dic))#<class ‘dict‘>

j=pickle.dumps(dic)

print(type(j))#<class ‘bytes‘>

f=open(‘序列化對象_pickle‘,‘wb‘)#註意是w是寫入str,wb是寫入bytes,j是‘bytes‘

f.write(j) #-------------------等價於pickle.dump(dic,f)

f.close()

#-------------------------反序列化

import pickle

f=open(‘序列化對象_pickle‘,‘rb‘)

data=pickle.loads(f.read())# 等價於data=pickle.load(f)

print(data[‘age‘])

★★★★★

import shelve

# d = shelve.open(‘shelve_test‘) # 打開一個文件

# name=[‘allen‘,14,‘male‘]

# d[‘alex‘]=name #會寫入到文件中

# d.close()

#讀出文件內容

# d = shelve.open(‘shelve_test‘) # 打開一個文件

# print(d[‘alex‘]) #[‘allen‘, 14, ‘male‘]

# d.close()

★★★★★

# import subprocess #下面的dir是一個命令,

# s=subprocess.Popen(‘dir‘,shell=True,stdout=subprocess.PIPE) # Popen是一個類 ,開啟新的子進程服務

#stdout是輸出的意思,還有stderr是輸入的意思,後期用到了再說,基本形式也是stderr=subprocess.PIPE這種

# print(s.stdout.read().decode(‘gbk‘))

#打印結果為:下面的

# 驅動器 E 中的卷沒有標簽。

# 卷的序列號是 0004-DF53

#

# E:\pythonS5\june\模塊整理 的目錄

#

# 2017/07/15 周六 下午 10:48 <DIR> .

# 2017/07/15 周六 下午 10:48 <DIR> ..

# 2017/07/15 周六 下午 10:48 14,183 各種模塊.py

# 1 個文件 14,183 字節

# 2 個目錄 68,064,280,576 可用字節

###

# 在linux:

# import subprocess

# subprocess.Popen(‘ls -l‘,shell=True)

#subprocess.Popen([‘ls‘,‘-l‘]) 看下面和上面的區別,下面是一個列表的話,就不用寫這個shell=True了

stdin 標準輸入

stdout 標準輸出

stderr 標準錯誤

★★★★★

★★★★★

# configparser 做文件的讀與寫操作

# import configparser #有它自己的格式,

# cfp=configparser.ConfigParser() # 相當於{}

# cfp["DEFAULT"]={"ServerAliveInterval":45,"Compression":"YES","CompressionLevel":9,"ForwardX11":"YES"}

# cfp["bitbucket.org"]={"USER":"hg"}

# cfp["topsecret.server.com"]={"Port ":5000123,"ForwardX11 ":"no"}

# with open("cfp.ini","w") as f:

# cfp.write(f) #這樣就會生成一個cfp.ini文件,裏面有這些字典的內容

# 下面是cfp.ini文件中的內容

# """

# [DEFAULT] #這個字段是默認的(也就是必須寫成[DEFAULT]),就相當於類裏面的共同特征,下面兩個字段都擁有這個[DEFAULT]字段的內容

# serveraliveinterval = 45

# compression = YES

# compressionlevel = 9

# forwardx11 = YES

#

# [bitbucket.org]

# user = hg

# [topsecret.server.com]

# port = 5000123

# forwardx11 = no

# """

#進行增刪改查操作

# import configparser

# cfp=configparser.ConfigParser()

# cfp.read("cfp.ini") #這個是要讀的文件

# print(cfp.sections()) # 查每個的字段名字,也就是最外層的鍵,這個打印沒有默認字段,默認的不需要打印

# print("topsecret.server.coms" in cfp) 判斷這個字段,在不在cfp中,若在則True

# print(cfp.items("bitbucket.org")) #取出所有的鍵值對,包括默認的和自己本身的

# print(cfp.options("bitbucket.org")) 取到所有鍵值對中的鍵

#print(cfp["bitbucket.org"]["user"]) 得到的結果是hg,就是根據字典取值方式進行取值,通過bitbucket.org"裏面的user,取到hg

# 用這個可以直接做三次登錄,判斷在不在這個裏面即可,in不in這裏面

★★★★★

re模塊在正則中整理

各個模塊整理