1. 字典的相關函數(shù)
字典的相關函數(shù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# ### 字典的相關函數(shù) dic = {} # 增 # 1.普通方法 (推薦) dic[ "top" ] = "369" dic[ "middle" ] = "左手" dic[ "bottom" ] = "杰克愛" print (dic) # 2.fromkeys 使用一組鍵和默認值創(chuàng)建字典 tup = ( "a" , "b" , "c" ) # fromkeys(盛放鍵的容器,默認值) dic = {}.fromkeys(tup, None ) print (dic) # 注意點 (字典中的三個鍵默認指向的是同一個列表) dic = {}.fromkeys(tup,[]) print (dic) dic[ "a" ].append( 1 ) print (dic) # 改造 dic = {} dic[ "top" ] = [] dic[ "middle" ] = [] dic[ "bottom" ] = [] dic[ "top" ].append( "the boy" ) print (dic) # 刪 dic = { 'top' : '369' , 'middle' : '左手' , 'bottom' : '杰克愛' } #pop() 通過鍵去刪除鍵值對 (若沒有該鍵可設置默認值,預防報錯) res = dic.pop( "middle" ) print (res) print (dic) # 可以給pop設置第二個參數(shù)值,以防止鍵不存在時報錯 res = dic.pop( "middle1234" , "該鍵不存在" ) print (res) #popitem() 刪除最后一個鍵值對 dic = { 'top' : '369' , 'middle' : '左手' , 'bottom' : '杰克愛' } res = dic.popitem() print (res) print (dic) #clear() 清空字典 dic.clear() print (dic) # 改 #update() 批量更新(有該鍵就更新,沒該鍵就添加) # 推薦使用 # 沒該鍵就添加 dic_new = { "jungle" : "karsa" , "support" : "寶藍" } dic = { 'top' : '369' , 'middle' : '左手' , 'bottom' : '杰克愛' } dic.update(dic_new) print (dic) # 有該鍵就更新 dic_new = { "top" : "the bug" , "support" : "xboyww" , "xiaozhang" : "王思聰" } dic.update(dic_new) print (dic) # (了解) dic.update(ww = "王文" ,zl = "張磊" ) print (dic) # 查 # get() 通過鍵獲取值(若沒有該鍵可設置默認值,預防報錯) dic = { "top" : "the bug" , "support" : "xboyww" , "xiaozhang" : "王思聰" } # res = dic["top123"] # get 在獲取字典鍵時,如果不存在,不會發(fā)生任何報錯,返回的是None res = dic.get( "top123" ) # 可以在獲取不到該鍵時,給與默認值提示. res = dic.get( "top123" , "抱歉,該鍵不存在" ) print (res) # 其他操作 #keys() 將字典的鍵組成新的可迭代對象 dic = { "top" : "the bug" , "support" : "xboyww" , "xiaozhang" : "王思聰" } res = dic.keys() print (res , type (res)) #values() 將字典中的值組成新的可迭代對象 *** res = dic.values() print (res , type (res)) #items() 將字典的鍵值對湊成一個個元組,組成新的可迭代對象 *** res = dic.items() print (res , type (res)) # for i in res: # print(i) for k,v in res: print (k,v) |
2. 集合的操作_函數(shù)
集合的相關操作 (交差并補)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# ### 1.集合的相關操作 (交差并補) # intersection() 交集 set1 = { "易烊千璽" , "王一博" , "劉某PDD" , "王文" } set2 = { "倪萍" , "趙忠祥" , "金龜子大風車" , "小龍人" , "王文" } res = set1.intersection(set2) print (res) # 簡寫 & res = set1 & set2 print (res) # difference() 差集 res = set1.difference(set2) print (res) # 簡寫 - res = set1 - set2 print (res) #union() 并集 res = set1.union(set2) print (res) # 簡寫 | res = set1 | set2 print (res) #symmetric_difference() 對稱差集 (補集情況涵蓋在其中) res = set1.symmetric_difference(set2) print (res) # 簡寫 ^ res = set1 ^ set2 print (res) #issubset() 判斷是否是子集 set1 = { "劉德華" , "郭富城" , "張學友" , "王文" } set2 = { "王文" } res = set2.issubset(set1) print (res) # 簡寫 res = set2 < set1 print (res) #issuperset 判斷是否是父集 set1 = { "劉德華" , "郭富城" , "張學友" , "王文" } set2 = { "王文" } res = set1.issuperset(set2) print (res) # 簡寫 res = set1 > set2 print (res) #isdisjoint() 檢測兩集合是否不相交 不相交 True 相交False set1 = { "劉德華" , "郭富城" , "張學友" , "王文" } set2 = { "王文" } res = set1.isdisjoint(set2) print (res) # ### 2.集合的相關函數(shù) # 增 #add() 向集合中添加數(shù)據(jù) # 一次加一個 set1 = { "王文" } set1.add( "王偉" ) print (set1) #update() 迭代著增加 # 一次加一堆 set1 = { "王文" } lst = [ "a" , "b" , "c" ] lst = "ppp" # 迭代這添加,無序,會自動去重 set1.update(lst) print (set1) # 刪 setvar = { '劉某PDD' , '小龍人' , '倪萍' , '趙忠祥' } #clear() 清空集合 # setvar.clear() # print(setvar) #pop() 隨機刪除集合中的一個數(shù)據(jù) # res = setvar.pop() # print(res) # print(setvar) #discard() 刪除集合中指定的值(不存在的不刪除 推薦使用) *** setvar.discard( "劉某PDD111111" ) # success # setvar.discard("劉某PDD") # print(setvar) #remove() 刪除集合中指定的值(不存在則報錯) (了解) # setvar.remove("劉某PDD111") # error # setvar.remove("劉某PDD") # print(setvar) # ### 3.冰凍集合 (額外了解) """frozenset 單純的只能做交差并補操作,不能做添加或者刪除的操作""" lst = [ "王文" , "宋健" , "何旭彤" ] fz1 = frozenset (lst) print (fz1, type (fz1)) # 不能再冰凍集合中添加或者刪除元素 # fz1.add(1) # fz1.update("abc") # fz1.discard("王文") # 冰凍集合只能做交差并補 lst2 = [ "王文" , "王同培" , "劉一縫" ] fz2 = frozenset (lst2) print (fz2, type (fz2)) # 交集 res = fz1 & fz2 print (res) # 遍歷冰凍集合 for i in fz2: print (i) |
3. 文件基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# ### 文件操作 """ 語法: fp = open(文件,模式,編碼集) fp => 文件的io對象 (文件句柄) i => input 輸入 o => outpur 輸出 fp.read() 讀取文件內(nèi)容 fp.write() 寫入文件的內(nèi)容 """ # 1.文件的寫入操作 # (1) 打開文件 fp = open ( "ceshi1.txt" ,mode = "w" ,encoding = "utf-8" ) # 打開冰箱門 # (2) 寫入內(nèi)容 fp.write( "把大象懟進去" ) # 把大象懟進去 # (3) 關閉文件 fp.close() # 把冰箱門關上 # 2.文件的讀取操作 # (1) 打開文件 fp = open ( "ceshi1.txt" ,mode = "r" ,encoding = "utf-8" ) # (2) 讀取內(nèi)容 res = fp.read() # (3) 關閉文件 fp.close() print (res) # 3.文件存儲二進制字節(jié)流 """ 二進制字節(jié)流:`用于傳輸數(shù)據(jù)或者存儲數(shù)據(jù)的一種數(shù)據(jù)格式 b"abc" b開頭的字節(jié)流要求數(shù)據(jù)只能是ascii編碼中的字符,不能是中文 # 將字符串和字節(jié)流(Bytes流)類型進行轉換 (參數(shù)寫成轉化的字符編碼格式) #encode() 編碼 將字符串轉化為字節(jié)流(Bytes流) #decode() 解碼 將Bytes流轉化為字符串 """ data = b "abc" data = "中文" .encode( "utf-8" ) print (data, type (data)) res = data.decode( "utf-8" ) print (res, type (res)) # utf-8下 一個中文占用3個字節(jié) data = "中文" .encode( "utf-8" ) # 計算字節(jié)總大小 print ( len (data)) # 把中字這個字節(jié)流進行反解恢復成原來中的字符 "中" res = b "\xe4\xb8\xad" .decode() print (res) # 4.文件存儲二進制的字節(jié)流 """如果存儲的是二進制字節(jié)流,指定模式wb,不要指定encoding編碼集,否則報錯""" fp = open ( "ceshi2.txt" ,mode = "wb" ) strvar = "紅鯉魚綠鯉魚與驢" .encode( "utf-8" ) fp.write(strvar) fp.close() # 5.文件讀取二進制的字節(jié)流 fp = open ( "ceshi2.txt" ,mode = "rb" ) res = fp.read() fp.close() print (res) print (res.decode()) # 6.復制文件 """所有的圖片,音頻,視頻都需要通過二進制字節(jié)流來進行存儲傳輸.""" # 先把原文件的二進制字節(jié)流讀取出來 # 相對路徑找集合.png 相對于當前3.py這個文件 # fp = open("集合.png",mode="rb") # 絕對路徑找集合.png 從最底層一級一級往上找 fp = open (r "D:\python32_python\day01\集合.png" ,mode = "rb" ) res = fp.read() fp.close() # 計算文件中的字節(jié)個數(shù) => 文件大小 print ( len (res)) # 在把二進制字節(jié)流寫入到另外一個文件中,相當于復制 fp = open ( "集合2.png" ,mode = "wb" ) fp.write(res) fp.close() |
4. 文件擴展模式
文件操作的擴展模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# ### 文件操作的擴展模式 """ # (utf-8編碼格式下 默認一個中文三個字節(jié) 一個英文或符號 占用一個字節(jié)) #read() 功能: 讀取字符的個數(shù)(里面的參數(shù)代表字符個數(shù)) 注意:從當前光標往右邊讀 #seek() 功能: 調(diào)整指針的位置(里面的參數(shù)代表字節(jié)個數(shù)) seek(0) 把光標移動到文件的開頭 seek(0,2) 把光標移動到文件的末尾 #tell() 功能: 當前光標左側所有的字節(jié)數(shù)(返回字節(jié)數(shù)) """ # 1.r+ 先讀后寫 """ fp = open("ceshi3.txt",mode="r+",encoding="utf-8") # 先讀 res = fp.read() # 在寫 fp.write("ab") # 在讀 fp.seek(0) # 通過seek把光標移動到開頭 print(fp.read()) fp.close() """ # 2.r+ 先寫后讀 """ fp = open("ceshi3.txt",mode="r+",encoding="utf-8") # 移動光標到最后,否則r模式下,原字符會被覆蓋 fp.seek(0,2) # 先寫 fp.write("cd") # 把光標移動到文件的開頭 fp.seek(0) # 在讀 res = fp.read() print(res) fp.close() """ # 3.w+ 可讀可寫,清空重寫(默認可以創(chuàng)建新的文件) """ fp = open("ceshi4.txt",mode="w+",encoding="utf-8") fp.write("abc") fp.seek(0) print(fp.read()) fp.close() """ # 4.a+ 可讀可寫,追加寫入 (默認可以創(chuàng)建新的文件) """ fp = open("ceshi5.txt",mode="a+",encoding="utf-8") fp.write("def") # 讀內(nèi)容 fp.seek(0) print(fp.read()) fp.close() """ # 5.r+和a+區(qū)別 """ r+模式基于當前光標所在位置進行寫入覆蓋 a+模式會強制把光標放到文件末尾進行追加寫入 """ """ # fp = open("ceshi5.txt",mode="r+",encoding="utf-8") fp = open("ceshi5.txt",mode="a+",encoding="utf-8") fp.seek(3) # 從頭數(shù) 3個字節(jié)的位置 # fp.write("zxc") # 模式會強制把光標放到文件末尾進行追加寫入 print(fp.read()) fp.close() """ # 6.seek,tell,read之間的使用 fp = open ( "ceshi5.txt" ,mode = "r+" ,encoding = "utf-8" ) fp.seek( 4 ) # tell 當前光標左邊所有內(nèi)容的字節(jié)數(shù) res = fp.tell() print (res) # 在r+模式下 read(2) 代表讀取2個字符 在rb模式下 read(2) 代表讀取2個字節(jié) fp.read( 2 ) # 當前光標往右所有的字符內(nèi)容 print (fp.tell()) fp.close() # 7.注意點 (seek在移動時,又可能移動到某個漢字的字節(jié)中間,導致原字節(jié)無法解析) """ fp = open("ceshi6.txt",mode="r+",encoding="utf-8") fp.seek(3) print(fp.read()) fp.close() # print("你".encode()) # b'\xe4\xbd\xa0' """ # 8.with語法 自動實現(xiàn)文件關閉操作 # 方法一.讀取二進制字節(jié)流 """ with open("集合2.png",mode="rb") as fp: res = fp.read() with open("集合3.png",mode="wb") as fp: fp.write(res) """ # 方法二.繼續(xù)簡化 with open ( "集合3.png" ,mode = "rb" ) as fp1 , open ( "集合4.png" ,mode = "wb" ) as fp2 : res = fp1.read() fp2.write(res) |
小提示:
1
2
3
4
5
6
7
8
9
10
11
12
|
字符串、列表、元組用+做一個拼接 集合無序去重的 如果這個數(shù)據(jù)不想讓別人任意修改,就把這些集合給冰凍起來 open一個類,來創(chuàng)建一個對象 decode(),括號里面不寫,默認是utf-8 w模式,如果文件已經(jīng)存在,也是先清空然后在寫入內(nèi)容 a模式,只能追加數(shù)據(jù),不能讀取數(shù)據(jù) a+可以讀取數(shù)據(jù),讀取數(shù)據(jù)不受影響,seek可以用(會強制把光標放到文件末尾進行追加寫入,用seek移動光標也是沒有用的) seek移動字節(jié)的時候還是應該慎用,因為一個中文字符占3個字節(jié),一個應為字符占用一個字節(jié),如果一個中文沒有截取完整則會報錯 seek(0) seek(0,2) 還有純英文的 純中文的文件使用seek 事實上,在移動我們的內(nèi)容的位置用的不是seek、而是通過read readline等 文件,后面的的那些函數(shù)來實現(xiàn)的 關閉文件這個操作必須要寫 |
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/weixin_46818279/article/details/120963693