一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python全棧之文件操作

Python全棧之文件操作

2022-03-10 13:14熬夜泡枸杞 Python

這篇文章主要為大家介紹了Python文件操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

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ù)

集合的相關操作 (交差并補)

Python全棧之文件操作

?
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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国美女被的免费视频 | 明星ai人脸替换造梦在线播放 | 亚洲ss| 朝鲜女人性猛交 | 精品性影院一区二区三区内射 | 天天色资料 | 国产精品日本一区二区三区在线看 | 亚洲欧美另类在线观看 | 天天综合天天综合色在线 | 青青草影院在线观看 | 大奶妈咪女教师 | 我的妹妹最近有点怪在线观看 | 韩国三级在线 | 国产区最新 | 五月天中文在线 | 爱情岛论坛亚洲一号路线 | mm在线| 精品国产福利一区二区在线 | 亚洲天堂男人天堂 | zoofilivideo杂交3d | 国产a一级毛片午夜剧院 | 猛男深夜狂cao小男生 | 明星ai智能人脸替换造梦在线播放 | 国内精品露脸在线视频播放 | 亚洲精品中文字幕久久久久久 | 日本暖暖视频在线观看 | 精品综合久久久久久88小说 | 精品一区二区国语对白 | 日本制服丝袜 | 色吧五月婷婷 | 被巨大黑人的翻白眼 | 3d动漫被吸乳羞羞 | 亚洲 欧美 国产 综合久久 | 动漫美女被羞羞产奶 | 国产在线观看网站 | 国产成人精品免费大全 | 欧美一卡2卡3卡无卡 | 国产重口老太伦 | 国产高清视频免费最新在线 | 天堂激情网 | 亚洲国产精品成人综合久久久 |