内置模块
1.1json模塊
json模塊是將滿足條件的數據結構轉化成特殊的字符串,并且也可以反序列化還原回去。
用于網絡傳輸:dumps、loads
用于文件寫讀:dump、load
import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic) ?#序列化:將一個字典轉換成一個字符串
print(type(str_dic),str_dic) ?#<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"}
#注意,json轉換完的字符串類型的字典中的字符串是由""表示的
?
dic2 = json.loads(str_dic) ?#反序列化:將一個字符串格式的字典轉換成一個字典
#注意,要用json的loads功能處理的字符串類型的字典中的字符串必須由""表示
print(type(dic2),dic2) ?#<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
?
?
list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}]
str_dic = json.dumps(list_dic) #也可以處理嵌套的數據類型
print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads(str_dic)
print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
dump、load
import jsonf = open('json_file.json','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump(dic,f) ?#dump方法接收一個文件句柄,直接將字典轉換成json字符串寫入文件
f.close()
# json文件也是文件,就是專門存儲json字符串的文件。
f = open('json_file.json')
dic2 = json.load(f) ?#load方法接收一個文件句柄,直接將文件中的json字符串轉換成數據結構返回
f.close()
print(type(dic2),dic2)
1.2 pickle模塊
pickle模塊是將Python所有的數據結構以及對象等轉化成bytes類型,然后還可以反序列化還原回去。
用于網絡傳輸:dumps、loads
用于文件寫讀:dump、load
dumps、loads
import pickledic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic) ?# bytes類型
?
dic2 = pickle.loads(str_dic)
print(dic2) ? ?#字典 # 還可以序列化對象
import pickle
?
def func():
? ?print(666)
? ?
ret = pickle.dumps(func)
print(ret,type(ret)) ?# b'\x80\x03c__main__\nfunc\nq\x00.' <class 'bytes'>
?
f1 = pickle.loads(ret) ?# f1得到 func函數的內存地址
f1() ?# 執行func函數
?
dump、load
dic = {(1,2):'oldboy',1:True,'set':{1,2,3}}f = open('pick序列化',mode='wb')
pickle.dump(dic,f)
f.close()
with open('pick序列化',mode='wb') as f1:
? ?pickle.dump(dic,f1)
?
2. os模塊
當前執行這個python文件的工作目錄相關的工作路徑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.popen("bash command).read() 運行shell命令,獲取執行結果 **
os.environ ?#獲取系統環境變量 **
?
#path系列,和路徑相關
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 ***
os.path.isabs(path) ?#如果path是絕對路徑,返回True **
os.path.isfile(path) ?#如果path是一個存在的文件,返回True。否則返回False ***
os.path.isdir(path) ?#如果path是一個存在的目錄,則返回True。否則返回False ***
os.path.join(path1,path2,...) ?#將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略 ***
os.path.getatime(path) ?#返回path所指向的文件或者目錄的最后訪問時間 **
os.path.getmtime(path) ?#返回path所指向的文件或者目錄的最后修改時間 **
os.path.getsize(path) #返回path的大小 ***
3. sys模塊
sys.argv ? ? ? ? ? #命令行參數List,第一個元素是程序本身路徑sys.exit(n) ? ? ? ?#退出程序,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version ? ? ? ?#獲取Python解釋程序的版本信息
sys.path ? ? ? ? ? #返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 ***
sys.platform ? ? ? #返回操作系統平臺名稱
4. hashlib模塊
密碼的加密。
文件一致性校驗。
4.1 密碼的加密
4.1.1 普通加密:
import hashlib?
md5 = hashlib.md5()
md5.update('123456'.encode('utf-8'))
print(md5.hexdigest())
?
# 計算結果如下:
'e10adc3949ba59abbe56e057f20f883e'
?
# 驗證:相同的bytes數據轉化的結果一定相同
import hashlib
?
md5 = hashlib.md5()
md5.update('123456'.encode('utf-8'))
print(md5.hexdigest())
?
# 計算結果如下:
'e10adc3949ba59abbe56e057f20f883e'
?
# 驗證:不相同的bytes數據轉化的結果一定不相同
import hashlib
?
md5 = hashlib.md5()
md5.update('12345'.encode('utf-8'))
print(md5.hexdigest())
?
# 計算結果如下:
'827ccb0eea8a706c4c34a16891f84e7b'
4.1.2 加鹽加密
固定的鹽
ret = hashlib.md5('李四'.encode('utf-8')) # 李四就是固定的鹽 ret.update('a'.encode('utf-8')) print(ret.hexdigest())?
動態的鹽
username = 'zhangsan66' ret = hashlib.md5(username[::2].encode('utf-8')) # 針對于每個賬戶,每個賬戶的鹽都不一樣 ret.update('a'.encode('utf-8')) print(ret.hexdigest())4.2 文件的一致性校驗
def file_check(file_path):with open(file_path,mode='rb') as f1:sha256 = hashlib.sha256()while 1:content = f1.read(1024)if content:sha256.update(content)else:return sha256.hexdigest() print(file_check('pycharm-professional-2019.1.1.exe'))5.時間有關的模塊
5.1 time模塊
(1)時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”,返回的是float類型。
(2)格式化的時間字符串(Format String):
%y 兩位數的年份表示(00-99) %Y 四位數的年份表示(000-9999) %m 月份(01-12) %d 月內中的一天(0-31) %H 24小時制小時數(0-23) %I 12小時制小時數(01-12) %M 分鐘數(00=59) %S 秒(00-59) %a 本地簡化星期名稱 %A 本地完整星期名稱 %b 本地簡化的月份名稱 %B 本地完整的月份名稱 %c 本地相應的日期表示和時間表示 %j 年內的一天(001-366) %p 本地A.M.或P.M.的等價符 %U 一年中的星期數(00-53)星期天為星期的開始 %w 星期(0-6),星期天為星期的開始 %W 一年中的星期數(00-53)星期一為星期的開始 %x 本地相應的日期表示 %X 本地相應的時間表示 %Z 當前時區的名稱 %% %號本身(3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)
| 0 | tm_year(年) | 比如2011 |
| 1 | tm_mon(月) | 1 - 12 |
| 2 | tm_mday(日) | 1 - 31 |
| 3 | tm_hour(時) | 0 - 23 |
| 4 | tm_min(分) | 0 - 59 |
| 5 | tm_sec(秒) | 0 - 60 |
| 6 | tm_wday(weekday) | 0 - 6(0表示周一) |
| 7 | tm_yday(一年中的第幾天) | 1 - 366 |
| 8 | tm_isdst(是否是夏令時) | 默認為0 |
時間轉換
# 格式化時間 ----> 結構化時間 ft = time.strftime('%Y/%m/%d %H:%M:%S') st = time.strptime(ft,'%Y/%m/%d %H:%M:%S') print(st) # 結構化時間 ---> 時間戳 t = time.mktime(st) print(t)# 時間戳 ----> 結構化時間 t = time.time() st = time.localtime(t) print(st) # 結構化時間 ---> 格式化時間 ft = time.strftime('%Y/%m/%d %H:%M:%S',st) print(ft)5.2 datetime模塊
# datatime模塊 import datetime now_time = datetime.datetime.now() # 現在的時間 # 只能調整的字段:weeks days hours minutes seconds print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后 print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前 print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前 print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后 print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小時后 print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小時前 print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分鐘前 print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分鐘后 print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前 print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后current_time = datetime.datetime.now() # 可直接調整到指定的 年 月 日 時 分 秒 等print(current_time.replace(year=1977)) # 直接調整到1977年 print(current_time.replace(month=1)) # 直接調整到1月份 print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601# 將時間戳轉化成時間 print(datetime.date.fromtimestamp(1232132131)) # 2009-01-176.random模塊
>>> import random #隨機小數 >>> random.random() # 大于0且小于1之間的小數 0.7664338663654585 >>> random.uniform(1,3) #大于1小于3的小數 1.6270147180533838 #恒富:發紅包#隨機整數 >>> random.randint(1,5) # 大于等于1且小于等于5之間的整數 >>> random.randrange(1,10,2) # 大于等于1且小于10之間的奇數#隨機選擇一個返回 >>> random.choice([1,'23',[4,5]]) # #1或者23或者[4,5] #隨機選擇多個返回,返回的個數為函數的第二個參數 >>> 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]?
轉載于:https://www.cnblogs.com/zy740/p/11106144.html
總結
- 上一篇: 计算机网络读后感500字,《网络少年》观
- 下一篇: 洛谷4951 地震 bzoj1816扑克