日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中Json、os、sys、hashlib等内置模块

發(fā)布時(shí)間:2025/3/20 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中Json、os、sys、hashlib等内置模块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 序列化模塊

1.1 json 模塊

不同語言都遵循的一種數(shù)據(jù)轉(zhuǎn)化格式,即不同語言都使用的特殊字符串。
json序列化只支持部分Python數(shù)據(jù)結(jié)構(gòu):dict,list,tuple,str,int, float,True,False,None

json模塊是將滿足條件的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化成特殊的字符串,并且也可以反序列化還原回去

  • 用于網(wǎng)絡(luò)傳輸:dumps、loads
  • 用于文件寫讀:dump、load

1.1.1 dumps、loads

import json lst = [1,2,3,4,5,6] str_lst = json.dumps(lst) print(str_lst,type(str_lst)) # 將列表轉(zhuǎn)換成字符串# [1, 2, 3, 4, 5, 6] <class 'str'>list_lst = json.loads(str_lst) print(list_lst,type(list_lst)) # 將字符串轉(zhuǎn)換成列表# [1, 2, 3, 4, 5, 6] <class 'list'># 總結(jié): dumps:將對象轉(zhuǎn)換(序列化)成字符串 loads:將字符串轉(zhuǎn)換(反序列化)成對象

1.1.2 dump、loads

import json lst = [1,2,3,4,5] f = open("info","a",encoding="utf-8") json.dump(lst,f) # 將列表寫入文件中 f.close()f = open("info","r",encoding="utf-8") f1 = json.load(f) print(f1, type(f1)) # 將文件中的字符串轉(zhuǎn)換成列表# 總結(jié): json.dump(對象,文件句柄):將對象轉(zhuǎn)換(序列化)成字符串寫入文件; json.load(文件句柄):將文件的字符串讀取轉(zhuǎn)換(反序列化)成對象。

1.1.3 同時(shí)寫/讀多個(gè)內(nèi)容

# 寫 lst = [1,2,3,4,5] f = open("info","a+",encoding="utf-8") f.write(json.dumps(lst)+"\n") f.write(json.dumps(lst)+"\n") f.write(json.dumps(lst)+"\n") f.close()# 讀 f1 = open("info","r",encoding="utf-8") for i in f1:s = json.loads(i) print(s,type(s)) # [1, 2, 3, 4, 5] <class 'list'>

1.2 pickle 模塊

pickle:序列化,將python所有對象進(jìn)行轉(zhuǎn)換,是python自帶的,不能用于其他語言。

1.2.1 dumps、loads

import pickle lst = [1,2,3,4,5] t_lst = pickle.dumps(lst) # 將列表轉(zhuǎn)換成類字節(jié) print(t_lst) #b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'li = pickle.loads(t_lst) #將類字節(jié)轉(zhuǎn)換成列表 print(li,type(li)) # [1, 2, 3, 4, 5] <class 'list'># 總結(jié): dumps:將對象轉(zhuǎn)換成類字節(jié); loads:將類字節(jié)轉(zhuǎn)換成對象。

1.2.2 dump、load

''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import pickle dic = {"name":"alex"} pickle.dump(dic,open("info","wb")) # 字典轉(zhuǎn)換成類字節(jié)寫入文件 print(pickle.load(open("info","rb"))) # 從文件讀取并轉(zhuǎn)換成字典# 總結(jié) pickle.dump(對象,文件句柄):將對象轉(zhuǎn)換(序列化)成類字節(jié)寫入文件; pickle.load(文件句柄):將文件的類字節(jié)讀取轉(zhuǎn)換(反序列化)成對象

1.2.3 同時(shí)寫/讀多個(gè)內(nèi)容

import pickle dic = {"a":1,"b"=2} f = open("info","wb") s = "\n".encode("utf-8") f.write(pickle.dumps(dic)+ s) f.write(pickle.dumps(dic)+ s) f.write(pickle.dumps(dic)+ s) f.close()# 從文件讀 f1 = open("info","rb") for i in f1:print(pickle.loads(i))

2. os 模塊

程序員通過python向操作系統(tǒng)發(fā)送指令(與操作系統(tǒng)交互的接口)。

''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' # 1.工作目錄: os.getcwd() # 當(dāng)前文件的工作目錄路徑 *** os.chdir("F:\s24\day06") # 工作目錄路徑切換 print(os.curdir) # 當(dāng)前級 print(os.pardir) # 父級# 2.文件夾 *** os.mkdir("文件夾名") # 創(chuàng)建一個(gè)文件夾 os.rmdir("文件夾名") # 刪除一個(gè)文件夾 os.makedirs("ttt/sss/ddd/ee") # 遞歸創(chuàng)建文件夾 os.removedirs("ttt/sss/ddd/ee") # 遞歸刪除文件夾 os.listdir(r"F:\s24\day17") # 將路徑下所有文件名按列表打印# 3.文件 os.rename() # 修改名字 os.remove("文件名") # 刪除文件# 4.路徑 os.path *** os.path.abspath(r"01 今日內(nèi)容.py") # 通過相對路徑獲取絕對路徑 os.path.split(r"F:\s24\day17\01 今日內(nèi)容.py") # 將路徑以最后一個(gè)\切割(路徑,文件名) os.path.dirname(r"F:\s24\day17\01 今日內(nèi)容.py") #只獲取路徑(沒有后面的文件名) os.path.basename(r"F:\s24\day17\01 今日內(nèi)容.py") #只獲取文件名 os.path.exists("路徑") # 判斷這個(gè)路徑是否存在 os.path.isdir(r"F:\s24\day17") # 判斷是不是工作目錄(路徑)(不能有文件名) os.path.isfile(r"01 今日內(nèi)容.py") # 判斷是不是文件 os.path.isabs(r"F:\s24\day17\01 今日內(nèi)容.py") # 判斷是不是絕對路徑 os.path.join("D:\\","ttt","bbb") # 路徑拼接 ***** os.path.getatime(r"F:\s24\day17\04 序列化.py") # 查看文件最后的修改時(shí)間 os.path.getsize(r"F:\s24\day09") # 獲取當(dāng)前文件/文件夾的大小** os.path.getctime(r"F:\s24\day17\04 序列化.py") # 查看文件最后的訪問時(shí)間 os.path.getmtime(r"F:\s24\day17\04 序列化.py") # 查看文件最后的訪問時(shí)間

3. sys 模塊

與python解釋器交互的接口。

*** sys.argv # 當(dāng)前文件運(yùn)行 ['D:/S24/Day 17/1.py']# 命令行參數(shù)List,第一個(gè)元素是程序本身路徑;當(dāng)做腳本執(zhí)行的時(shí)候能夠攜帶參數(shù) sys.path #返回模塊的搜索路徑(列表),初始化時(shí)使用pythonpath環(huán)境變量的值** sys.exit(n) # 退出程序,正常退出時(shí)exit(0),錯(cuò)誤退出sys.exit(1),可修改 sys.version # 獲取解釋器版本 sys.platform # 返回操作系統(tǒng)平臺名稱

4. hashlib 加密、摘要

4.1 加密

作用:加密和校驗(yàn)

四種:md5 、 sha1 、 sha256 、 sha512

  • 只要明文相同,密文就是相同的;
  • 只要明文不相同,密文就是不相同的;
  • 不能反逆(不能解密)–md5被中國人破解
  • # 加密:1.加密的內(nèi)容;2.將要加密的內(nèi)容轉(zhuǎn)換成字節(jié) ''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' # md5加密: import hashlib md5 = hashlib.md5() # 初始MD5 md5.update("加密內(nèi)容",encode("編碼集")) #放內(nèi)容,編碼集可隨意 print(md5.hexdigest()) # 合成 輸出# 其他方法,字節(jié)較長,算法越高,轉(zhuǎn)化成的結(jié)果越復(fù)雜,安全程度越高,相應(yīng)的效率就會(huì)越低。# 最常用的是md5,平時(shí)加密的時(shí)候sha1

    4.2 加鹽
    4.2.1 固定加鹽

    import hashlib md5 = hashlib.md5('學(xué)習(xí)'.encode('utf-8')) # 學(xué)習(xí)就是固定的鹽 md5.update('a'.encode('utf-8')) print(md5.hexdigest())

    4.2.3 動(dòng)態(tài)加鹽

    user = input("請輸入賬號:") pwd = input("請輸入密碼:") import hashlib md5 = hashlib.md5(user.encode('utf-8')) # user每次都變 md5.update(pwd.encode('utf-8')) print(md5.hexdigest())

    4.3 文件一致性校驗(yàn)

    ‘’‘下載一個(gè)軟件時(shí),往往都帶有一個(gè)MD5或者shax值,當(dāng)下載完成這個(gè)應(yīng)用程序時(shí)你要是對比大小根本看不出什么問題,應(yīng)該對比它們的md5值,如果兩個(gè)md5值相同,就證明這個(gè)應(yīng)用程序是安全的,如果你下載的這個(gè)文件的MD5值與服務(wù)端給你提供的不同,那么就證明你這個(gè)應(yīng)用程序肯定是植入病毒了(文件損壞的幾率很低),那么應(yīng)該趕緊刪除。’’’

    ''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' # python-3.6.6-amd64.exe 文件檢驗(yàn) f = open(r"F:\s24\day17\python-3.6.6-amd64.exe","rb") import hashlib md5 = hashlib.md5() while True:msg = f.read(1024)if msg:md5.update(msg)else:print(md5.hexdigest())break # 767db14ed07b245e24e10785f9d28e29 結(jié)果一樣說明ok的

    5. collections 模塊

    5.1 Counte 統(tǒng)計(jì)(***)

    from collections import Counter s = [1,1,2,2,3,3] print(dict(Counter(s))) # {1: 2, 2: 2, 3: 2}s1 = ("a",2,3,3,"a",2,"a",1,"a") print(dict(Counter(s1))) # {'a': 4, 2: 2, 3: 2, 1: 1} # 統(tǒng)計(jì)元素出現(xiàn)的次數(shù),以字典的形式輸出

    5.2 namedtuple 命名元組

    # 生成可以使用名字來訪問元素內(nèi)容的tuple namedtuple('名稱', [屬性list])from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p) # Point(x=1, y=2)

    5.3 deque 雙端隊(duì)列

    # 雙端隊(duì)列,可以快速的從另外一側(cè)追加和推出對象 ''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' lst = deque([1,2,3,4,5,6,7]) lst.append(8) # 末尾增加 lst.appendleft(0) # 首加 lst.pop() # 末尾刪除 lst.popleft() # 首刪

    5.4 defaultdict 帶有默認(rèn)值的字典

    # 帶有默認(rèn)值的字典''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' from collections import defaultdict dic = defaultdict(list) # 定義字典值數(shù)據(jù)類型list dic["key1"].append(12) # 將值添加到列表中,鍵為key1 print(dic) # {'key1': [12]}# 將所有大于 66 的值保存至字典的第一個(gè)key中,將小于 66 的值保存至第二個(gè)key的值中。 from collections import defaultdict values = [11, 22, 33,44,55,66,77,88,99,90] my_dict = defaultdict(list)for value in values:if value>66:my_dict['k1'].append(value)else:my_dict['k2'].append(value)

    5.5 OrderedDict 有序字典

    from collections import OrderedDict od = OrderedDict([]) od["z"] = 1 od["y"] = 2 od["x"] = 3 print(od) # OrderedDict([('z', 1), ('y', 2), ('x', 3)]) 會(huì)按照插入的順序排列

    總結(jié)

    以上是生活随笔為你收集整理的python中Json、os、sys、hashlib等内置模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。