欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Python關(guān)于文件操作-創(chuàng)新互聯(lián)

文件操作

創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、移動(dòng)互聯(lián)產(chǎn)品、成都營銷網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。十余年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

初識(shí)文件操作

使用python來讀寫文件是非常簡單的操作,我們使用open()函數(shù)來打開某個(gè)文件,獲取到文件句柄,然后通過文件句柄就可以進(jìn)行各種各樣的操作了。根據(jù)打開形式的不同能夠執(zhí)行的操作也會(huì)有相應(yīng)的差異。操作文件的方式一般有如下:

r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b

默認(rèn)使用的是r(只讀)模式

只讀操作(r, rb)

f = open("python", mode="r", encoding="utf-8")

content = f.read()

print(content)

f.close()

python.txt

這是python文件

運(yùn)行結(jié)果:

這是python文件

Process finished with exit code 0

需要注意encoding表示編碼集,根據(jù)文件的實(shí)際保存編碼進(jìn)行獲取數(shù)據(jù),對(duì)于我們來說,使用更多的是utf-8。

rb. 讀取出來的數(shù)據(jù)是bytes類型,,在rb模式下,不能選擇encoding字符集。

f = open("python", mode="rb")

content = f.read()

print(content)

f.close()

python.txt

這是python文件

運(yùn)行結(jié)果:

b'\xe8\xbf\x99\xe6\x98\xafpython\xe6\x96\x87\xe4\xbb\xb6'

Process finished with exit code 0

rb的作用: 在讀取非文本文件的時(shí)候. 比如讀取MP3、圖像、視頻等信息的時(shí)候就需要用到rb。因?yàn)檫@種數(shù)據(jù)是沒辦法直接顯示出來的. 在后面文件上傳下載的時(shí)候還會(huì)用到。還有,我們看的直播,實(shí)際上都是這種數(shù)據(jù)。

路徑

一般分為絕對(duì)路徑和相對(duì)路徑:

1. 絕對(duì)路徑:從磁盤根目錄開始一直到文件名。

2. 相對(duì)路徑:同一個(gè)文件夾下的文件,相對(duì)于當(dāng)前這個(gè)程序所在的文件夾而言,如果在同一個(gè)文件夾中。則相對(duì)路徑就是這個(gè)文件名,如果在上一層文件夾,則要使用../表示上一層文件,如果在上多層文件夾中,則需要使用多次../。

一般在開發(fā)過程中推薦大家使用相對(duì)路徑。因?yàn)樵谖覀儼殉绦蚩截惤o別人使用的時(shí)候. 直接把整個(gè)項(xiàng)目文件拷貝出去就能運(yùn)行,但是如果使用絕對(duì)路徑,那還需要拷貝外部的文件。

獲取文件

read()

將文件中的內(nèi)容全部讀取出來。弊端:占內(nèi)存。如果文件過大,容易導(dǎo)致內(nèi)存崩潰,使用時(shí)應(yīng)該小心謹(jǐn)慎。

f = open("../FileOne/靜夜思.txt", mode="r", encoding="utf-8")

content = f.read()

print(content)

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

運(yùn)行結(jié)果:

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

Process finished with exit code 0

read(n)

讀取n個(gè)字符,需要注意的是,如果再次讀取,那么會(huì)在當(dāng)前位置繼續(xù)去讀而不是從頭讀,如果使用的是rb模式,則讀取出來的是n個(gè)字節(jié)。

f = open("../FileOne/靜夜思.txt", mode="r", encoding="utf-8")

content = f.read(4)

contentOne = f.read(5)

print(content)

print(contentOne)

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

運(yùn)行結(jié)果:

床前明月

疑是地

Process finished with exit code 0

值得注意的是,在這里換行符表示一個(gè)字節(jié)。前面4個(gè)字節(jié),后面接著輸出5個(gè)字節(jié)。

f = open("../FileOne/靜夜思.txt", mode="rb")

content = f.read(4)

contentOne = f.read(5)

print(content)

print(contentOne)

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

運(yùn)行結(jié)果:

b'\xe5\xba\x8a\xe5'

b'\x89\x8d\xe6\x98\x8e'

Process finished with exit code 0

readline()

一次讀取一行數(shù)據(jù),注意:readline()結(jié)尾,注意每次讀取出來的數(shù)據(jù)都會(huì)有一個(gè)\n 。所以呢,需要我們使用strip()方法來去掉\n或者空格,當(dāng)然,我們也可以在print后面加上end=""去掉空格。

f = open("../FileOne/靜夜思.txt", mode="r", encoding="utf-8")

contentOne = f.readline()

contentTwo = f.readline()

contentThree = f.readline()

contentFour = f.readline()

print(contentOne.strip())

print(contentTwo.strip())

print(contentThree, end="")

print(contentFour, end="")

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

運(yùn)行結(jié)果:

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

Process finished with exit code 0

readlines()

將每一行形成一個(gè)元素,放到一個(gè)列表中,將所有的內(nèi)容都讀取出來,所以也是,容易出現(xiàn)內(nèi)存崩潰的問題,一般不推薦不推薦使用。

f = open("../FileOne/靜夜思.txt", mode="r", encoding="utf-8")

lst = f.readlines()

print(lst)

for line in lst:

print(line.strip())

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

['床前明月光\n', '疑是地上霜\n', '舉頭望明月\n', '低頭思故鄉(xiāng)']

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

Process finished with exit code 0

從列表里面我們可以看出,每次獲取的行后面都會(huì)有換行符/n。因此,打印過程中我們應(yīng)該使用strip()或者end = ()去掉換行。

循環(huán)讀取

f = open("../FileOne/靜夜思.txt", mode="r", encoding="utf-8")

for line in f:

print(line.strip())

靜夜思.txt

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

運(yùn)行結(jié)果:

床前明月光

疑是地上霜

舉頭望明月

低頭思故鄉(xiāng)

Process finished with exit code 0

這種方式是事先就組好了,每次讀取一行的內(nèi)容,不會(huì)產(chǎn)生內(nèi)存溢出的問題。

注意:

在每次讀取完文件時(shí),應(yīng)該關(guān)閉文件句柄。f.closed()

在執(zhí)行操作過后可使用刷新機(jī)制對(duì)文件進(jìn)行刷新。f.flush()

寫模式(r,rw)

寫的時(shí)候注意,如果沒有文件,則會(huì)創(chuàng)建文件,如果文件存在,則將原件中原來的內(nèi)容刪除,再寫入新內(nèi)容。

f = open("?娃娃", mode="w", encoding="utf-8")

f.write("??獅王")

# f.read() # 嘗試讀取文件,此時(shí)只是寫,拋出io.UnsupportedOperation: not readable

f.flush() # 刷新. 養(yǎng)成好習(xí)慣

f.close()

創(chuàng)建了文件:小娃娃

??獅王

運(yùn)行結(jié)果:

Process finished with exit code 0

本次文件寫操作執(zhí)行完畢后,程序結(jié)束,控制臺(tái)沒有輸出值,只是在列表中創(chuàng)建了文件。

f = open("?娃娃", mode="wb")

f.write("??獅王".encode("utf-8"))

f.flush()

f.close()

創(chuàng)建文件:小娃娃

??獅王

運(yùn)行結(jié)果:

Process finished with exit code 0

wb模式下,可以不指定文件的編碼,但是在寫文件的時(shí)候必須將字符串轉(zhuǎn)換為utf-8的bytes數(shù)據(jù),如果不轉(zhuǎn)化,將會(huì)出現(xiàn)一下的錯(cuò)誤。

TypeError: a bytes-like object is required, not 'str'

追加(a,ab)

在追加模式下. 我們寫入的內(nèi)容會(huì)追加在文件的結(jié)尾.

f = open("?娃娃", mode="a", encoding="utf-8")

f.write("麻花藤的最愛")

f.write("是小學(xué)生")

f.flush()

f.close()

創(chuàng)建文件:小娃娃

麻花藤的最愛是小學(xué)生

運(yùn)行結(jié)果:

Process finished with exit code 0

f = open("?娃娃", mode="ab")

f.write("麻花藤的最愛".encode())

f.write("是小學(xué)生".encode())

f.flush()

f.close()

創(chuàng)建文件:小娃娃

麻花藤的最愛是小學(xué)生

運(yùn)行結(jié)果:

Process finished with exit code 0

由于編譯器默認(rèn)的是utf-8,所以在小娃娃文件中顯示的是未改變的字符。

讀寫模式(r+,r+b)

對(duì)于讀寫模式,必須是先讀。因?yàn)槟J(rèn)光標(biāo)是在開頭的,準(zhǔn)備讀取的,當(dāng)讀完了之后再進(jìn)行寫入,我們以后使用頻率高的模式就是r+。

f = open("?娃娃", mode="r+", encoding="utf-8")

content = f.read()

f.write("麻花藤的最愛")

print(content)

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

麻花藤的最愛

運(yùn)行后的文件:小娃娃

麻花藤的最愛麻花藤的最愛

運(yùn)行結(jié)果:

麻花藤的最愛

Process finished with exit code 0

在正常的讀取后,文件的寫入在結(jié)尾。

下面演示錯(cuò)誤操作:

f = open("?娃娃", mode="r+", encoding="utf-8")

f.write("哈哈")

content = f.read()

print(content)

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

麻花藤的最愛

運(yùn)行后的文件:小娃娃

哈哈藤的最愛

運(yùn)行結(jié)果:

藤的最愛

Process finished with exit code 0

在沒有任何操作之前,默認(rèn)的光標(biāo)在開頭,當(dāng)寫入“哈哈”以后,“麻花”二字被覆蓋,且光標(biāo)往后移動(dòng)了兩個(gè)位置,默認(rèn)讀取從光標(biāo)后開始讀取。

總結(jié),在r+模式下,必須是先讀取,再寫入。

寫讀(w+,w+b)

先將所有的內(nèi)容清空,然后寫入,最后讀取,但是讀取的內(nèi)容是空的,一般不常用。

f = open("?娃娃", mode="w+", encoding="utf-8")

f.write("哈哈")

content = f.read()

print(content)

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

麻花藤的最愛

運(yùn)行后的文件:小娃娃

哈哈

運(yùn)行結(jié)果:

Process finished with exit code 0

那么可能有同學(xué)會(huì)問,先讀不就好了么?

錯(cuò)。理由:w+ 模式下, 一開始讀取不到數(shù)據(jù),然后寫的時(shí)候再將原來的內(nèi)容清空,所以這種操作方式很少用。

追加讀(a+)

a+模式下,不論先讀還是后讀,都是讀取不到數(shù)據(jù)的。

f = open("?娃娃", mode="a+", encoding="utf-8")

f.write("麻花藤")

content = f.read()

print(content)

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

愛笑的眼睛

運(yùn)行后的文件

愛笑的眼睛麻花藤

運(yùn)行結(jié)果:

Process finished with exit code 0

還有一些其它帶b的操作,就不多贅述了,就是把字符換成字節(jié),僅此而已。

其它相關(guān)操作

seek(n)

光標(biāo)移動(dòng)到n位置,注意,移動(dòng)的單位是byte,所以如果是utf-8的中文部分要是3的倍數(shù)。

通常我們使用seek都是移動(dòng)到開頭或者結(jié)尾。

移動(dòng)到開頭:seek(0) 。鄭州人流價(jià)格 http://www.zzzykdfk.com/

移動(dòng)到結(jié)尾:seek(0,2),seek的第一個(gè)參數(shù)表示的是從哪個(gè)位置進(jìn)行偏移,默認(rèn)是0,表示開頭,1表示當(dāng)前位置,2表示結(jié)尾。

f = open("?娃娃", mode="r+", encoding="utf-8")

f.seek(0) # 光標(biāo)移動(dòng)到開頭

content = f.read() # 讀取內(nèi)容, 此時(shí)光標(biāo)移動(dòng)到結(jié)尾

print(content)

f.seek(0) # 再次將光標(biāo)移動(dòng)到開頭

f.seek(0, 2) # 將光標(biāo)移動(dòng)到結(jié)尾

content2 = f.read() # 讀取內(nèi)容. 什么都沒有

print(content2)

f.seek(0) # 移動(dòng)到開頭

f.write("張國榮") # 寫?信息. 此時(shí)光標(biāo)在9 中?3 * 3個(gè) = 9

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

123456789

運(yùn)行后的文件:小娃娃

張國榮

運(yùn)行結(jié)果:

123456789

Process finished with exit code 0

tell()

獲取到當(dāng)前光標(biāo)位置。

f = open("?娃娃", mode="r+", encoding="utf-8")

f.seek(0) # 光標(biāo)移動(dòng)到開頭

content = f.read() # 讀取內(nèi)容, 此時(shí)光標(biāo)移動(dòng)到結(jié)尾

print(content)

f.seek(0) # 再次將光標(biāo)移動(dòng)到開頭

f.seek(0, 2) # 將光標(biāo)移動(dòng)到結(jié)尾

content2 = f.read() # 讀取內(nèi)容. 什么都沒有

print(content2)

f.seek(0) # 移動(dòng)到開頭

f.write("張國榮") # 寫?信息. 此時(shí)光標(biāo)在9 中?3 * 3個(gè) = 9

print(f.tell()) # 光標(biāo)位置9

f.flush()

f.close()

運(yùn)行前的文件:小娃娃

123456789

運(yùn)行后的文件:小娃娃

123456789

9

Process finished with exit code 0

truncate()

截?cái)辔募鈽?biāo)后的內(nèi)容,日常操作過程中幾乎不用。

f = open("小娃娃", mode="w", encoding="utf-8")

f.write("哈哈") # 寫?兩個(gè)字符

f.seek(3) # 光標(biāo)移動(dòng)到3, 也就是兩個(gè)字中間

f.truncate() # 刪掉光標(biāo)后?的所有內(nèi)容

f.close()

運(yùn)行前的文件:小娃娃

麻花藤最愛的人

運(yùn)行后的文件

運(yùn)行結(jié)果:

Process finished with exit code 0

深坑請(qǐng)注意:在r+模式下,如果讀取了內(nèi)容,不論讀取內(nèi)容多少,光標(biāo)顯示的是多少,再寫入或者操作文件的時(shí)候都是在結(jié)尾進(jìn)行的操作。

所以如果想做截?cái)嗖僮?,記住了,要先挪?dòng)光標(biāo),挪動(dòng)到你想要截?cái)嗟奈恢?,然后再進(jìn)行截?cái)嚓P(guān)于truncate(n), 如果給出了n. 則從開頭開頭進(jìn)行截?cái)啵绻唤on,則從當(dāng)前位置截?cái)?,后面的?nèi)容將會(huì)被刪除。

修改文件以及另一種打開文件的方式

import os

with open("?娃娃", mode="r", encoding="utf-8") as f1, \

open("?娃娃_new", mode="w", encoding="UTF-8") as f2:

content = f1.read()

new_content = content.replace("冰糖葫蘆", "??梨")

f2.write(new_content)

os.remove("?娃娃") # 刪除源?件

os.rename("?娃娃_new", "?娃娃") # 重命名新?件

弊端:一次將所有內(nèi)容進(jìn)行讀取,導(dǎo)致內(nèi)存溢出,解決?案: 一行一行的讀取和操作。

import os

with open("?娃娃", mode="r", encoding="utf-8") as f1, \

open("?娃娃_new", mode="w", encoding="UTF-8") as f2:

for line in f1:

new_line = line.replace("??梨", "冰糖葫蘆")

f2.write(new_line)

os.remove("?娃娃") # 刪除源?件

os.rename("?娃娃_new", "?娃娃") # 重命名新?件

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:Python關(guān)于文件操作-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://aaarwkj.com/article38/gccpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、電子商務(wù)服務(wù)器托管、建站公司用戶體驗(yàn)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)
少妇高潮时会抱紧男人脖子| 色婷婷av一区二区三| 国产av剧情一区二区| 乱码日本欧美一区二区| 人妻激情偷乱视91九色| 欧美在线免费一级黄片| 91亚色在线免费观看| 丝袜美腿亚洲综合一区| 亚洲日本va午夜中文字幕一区| 亚洲欧美国产精品久久久| 欧美亚洲综合激情在线| 日本韩国国产三级在线| 欧美高清视频看片在线观看| 中文字幕一区二区中文字幕| 亚洲乱人伦一区二区三区| 欧美av一区二区三区四区| 日本在线观看免费高清| 国产中文字幕婷婷丁香| 91激情黑丝在线观看| 国产传媒在线免费播放视频| 91国产自拍在线视频| 白白日韩欧美在线视频| 日本一区二区三区免费精品| 亚洲一级香蕉视频东京热| 亚洲欧美午夜不卡视频| 亚洲黄色录像一区二区人妻黑人 | 精品国产美女诱惑久久久| 日韩高清av一区二区三区| 丝袜美腿一区在线播放| 免费在线观看av不卡| 午在线亚洲男人午在线| 青青草成年人免费视频 | 蜜桃精品人妻一区二区三区| 免费av男人天堂亚洲天堂| 日韩高清视频 一区二区| 少妇被按摩高潮在线观看| 国产丝袜在线精品丝袜不卡| 国产aaa级日本一区二区三区| 日本91一区二区不卡| 两性色午夜视频在线观看| 久久婷婷国产综合色啪|