Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互
文章目錄
- 文件的操作
- open()建立一個(gè)文件對(duì)象
- 語(yǔ)法
- butlin關(guān)于open()方法的英文解釋
- open() 方法支持參數(shù)
- file :文件的路徑 可以是絕對(duì)路徑,也可以是相對(duì)路徑
- mode :操作文件的模式,可選參數(shù),默認(rèn)為“r”
- buffering =
- encoding
- errors
- newline :指定換行符
- closefd 指定關(guān)閉文件描述符
- opener
 
 
- 文件對(duì)象的各類操作方法
- 各類方法示例:
- read()
- widowns下file使用相對(duì)路徑
- windows下file使用絕對(duì)路徑
- 指定讀取字符個(gè)數(shù)
 
- readline()
- 不帶參數(shù)
- 帶數(shù)字參數(shù)
- 多次readline() 并觀察光標(biāo)(指針)的計(jì)數(shù)
 
- readlines()
- 不帶參數(shù)
- 帶1個(gè)數(shù)字參數(shù)(數(shù)字為1小于一行的字符數(shù))
- 帶1個(gè)參數(shù)(每數(shù)字都小于每行的字符個(gè)數(shù))
- 帶1個(gè)參數(shù)(大于一行的字符個(gè)數(shù))
 
- mode="w":--探索w模式默認(rèn)的一上來(lái)就truncate()操作
- write()--往文件內(nèi)寫(xiě)內(nèi)容
- write()--探索write()的覆蓋寫(xiě)操作
- seek() 設(shè)置指針(光標(biāo))的位置
- tell() 獲取當(dāng)前指針(光標(biāo))的位置
- flush() 將緩存中內(nèi)容寫(xiě)到磁盤(pán),刷寫(xiě)磁盤(pán)--打印一個(gè)進(jìn)度條顯示
- 方法一:使用sys模塊的stdout()
 
- truncate() 截短
- truncate 示例:探索truncate只截取指針(光標(biāo))之后的內(nèi)容
 
- fileno() 查看當(dāng)前文件的“文件描述符”
- readable()-判斷文件是否可讀
- writeable()-判斷文件是否可寫(xiě)
 
 
- 遍歷文件內(nèi)容
- 直接for循環(huán)每一行內(nèi)容
- 直接for循環(huán)readlines()每一行內(nèi)容(去掉print的換行符)
- 直接for 循環(huán)file的每一行
- 遍歷并修改指定行內(nèi)容
- 將文件轉(zhuǎn)成“枚舉”后打印行號(hào)
 
- with 語(yǔ)句
能調(diào)用方法的只有對(duì)象,文件本身也是一個(gè)對(duì)象
文件的操作
文件的操作過(guò)程:
- 養(yǎng)成良好的習(xí)慣,文件用完之后要使用“close()”關(guān)閉文件,也可以使用“with” 來(lái)打開(kāi)文件,用完之后會(huì)自動(dòng)關(guān)閉相應(yīng)的文件
open()建立一個(gè)文件對(duì)象
- 用于打開(kāi)一個(gè)文件,并賦以相應(yīng)的權(quán)限,打開(kāi)的內(nèi)容可以使用一個(gè)變量進(jìn)行接收
語(yǔ)法
open ( file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None )butlin關(guān)于open()方法的英文解釋
open() 方法支持參數(shù)
file :文件的路徑 可以是絕對(duì)路徑,也可以是相對(duì)路徑
+ 絕對(duì)路徑:從文件系統(tǒng)的根開(kāi)始 + 相對(duì)路徑:相對(duì)于程序文件目錄mode :操作文件的模式,可選參數(shù),默認(rèn)為“r”
+ r: read--讀文件操作,如果只有“r”參數(shù),在文本模式中,文件是只讀不可寫(xiě)的 + w: write--寫(xiě)文件操作,如果是只有“w”參數(shù),文件是只寫(xiě)不可讀的,單獨(dú)使用此參數(shù)請(qǐng)注意,一旦創(chuàng)建這個(gè)文件對(duì)象,且有寫(xiě)操作,則直接清空文件內(nèi)容,如果沒(méi)有這個(gè)文件,則創(chuàng)建這個(gè)文件。原文為“open for writing, truncating the file first”,一旦開(kāi)始,首先就截短文件為空白。 + x: exclusive 如果不存在這個(gè)文件就創(chuàng)建,如果文件已經(jīng)存在則打開(kāi)打敗。可用于創(chuàng)建文件前先判斷此文件是否已經(jīng)存在 + a: append--往后面追加,也不能讀,與“w”一樣,都是寫(xiě),不同之處在于,無(wú)論當(dāng)前的seek位置(指針位置,或者叫光標(biāo)的位置)在哪里,a是往文件最后追加,默認(rèn)情況下往最后直接寫(xiě),建議在寫(xiě)之前先加一個(gè)“\n”換行符。 + b: 二進(jìn)制模式 + t: 文本模式(默認(rèn)模式) + +: 打開(kāi)文件用于更新(讀和寫(xiě))- r+: 讀寫(xiě)模式,從指針?biāo)诘奈恢猛髮?xiě),往哪兒寫(xiě)要看指針?biāo)谖恢?#xff0c;指針?biāo)谖恢每梢允褂胻ell()方法查詢- w+: 寫(xiě)讀模式,寫(xiě)完一個(gè)數(shù)據(jù)后,指針就移到寫(xiě)的末尾,如果此時(shí)再讀,要看后面有沒(méi)有內(nèi)容。或者使用seek() 調(diào)整光標(biāo)的位置- a+: 追加讀模式,與寫(xiě)一樣,需要看打針?biāo)诘奈恢?#xff0c;因?yàn)閍默認(rèn)是從文件尾部追加,所以讀就從此后讀,所以不調(diào)整光標(biāo)默認(rèn)讀到的是空白buffering =
+ 是一個(gè)可選的數(shù)字參數(shù),用于設(shè)置緩存策略- 0 : 關(guān)閉緩存(僅允許在二進(jìn)制模式中)- 1 :行緩存(僅在文本模式中可用)- >1 :用于指明緩存的字節(jié)大小 + 當(dāng)沒(méi)有二進(jìn)程文件緩存至指定大小的框中,默認(rèn)策略如下:- 二進(jìn)制文件 固定緩存大小- 緩存的大小使用一種探索式的嘗試從度層設(shè)備的“塊大小”反饋來(lái)設(shè)置默認(rèn)的緩存大小(DEFAULT_BUFFER_SIZE)- 在許多系統(tǒng)中,緩存的典型大小是4字節(jié)或者8字節(jié)。encoding
+ 用于標(biāo)明文件內(nèi)字符編碼 + 在文本模式下,如果“encoding”沒(méi)有手動(dòng)指定,將使用操作系統(tǒng)平臺(tái)默認(rèn)的locale,python3 會(huì)通過(guò)“l(fā)ocale.getpreferredencoding(False)”函數(shù)來(lái)獲取當(dāng)前平臺(tái)的默認(rèn)編碼。 + 二進(jìn)制模式下,讀寫(xiě)都使用裸字節(jié),就是原始的0101直接發(fā)過(guò)去,所以保留了原始的編碼。errors
+ 是一個(gè)可選項(xiàng) + 用于指定怎么對(duì)“encoding”,"decoding"所遇到的錯(cuò)誤 + 不能用于二進(jìn)制模式 + 各種各樣的標(biāo)準(zhǔn)錯(cuò)誤處理方法都可以使用“error()”函數(shù)進(jìn)行處理,標(biāo)準(zhǔn)和名稱包含如下:- ignore : 忽略,**注意**:忽略編碼錯(cuò)誤會(huì)導(dǎo)致數(shù)據(jù)丟失- strict :嚴(yán)格,編碼錯(cuò)誤時(shí),提高異常錯(cuò)誤的值,默認(rèn)的值為None與strict有同樣的功能- replace :替換,編碼錯(cuò)誤時(shí),生成一個(gè)替換的標(biāo)記(如“?”),然后插入到原文中,會(huì)看起來(lái)很難看。- surrogateescape :+ 不知道咋翻譯:從單詞上看“代理逃逸”:如遇到編碼錯(cuò)誤,將使用“Unicode”的私有編碼,范圍從“U+DC80” 到“ U+DCFF”的來(lái)替換錯(cuò)誤字節(jié)到原位置+ 對(duì)于處理一些不知道編碼的文件會(huì)很有用。- xmlcharrefreplace:+ 僅用于寫(xiě)文件時(shí),編碼不支持的字符,將會(huì)使用一個(gè)合適的XML特性,如&#nnn;- backslashreplace :+ 使用Python的 逃逸符“\”來(lái)代替原先畸形的數(shù)據(jù)- namereplace:+ 僅用于寫(xiě)文件,+ 使用“\N”來(lái)替換不支持的字符newline :指定換行符
- 僅用于“文本模式”
- 用于控制如何換行,就是說(shuō)明一下文件的換行符:
- 換行符可以是: - None
- "
- ‘\n’
- ‘\r’
- ‘\r\n’
 
- 如果從一個(gè)數(shù)據(jù)流中輸入數(shù)據(jù): - 換行符是None,使用的是通用的換行模式,一行的結(jié)束可以是‘\n’,’\r’或者是’\r\n’,在將數(shù)據(jù)返回給請(qǐng)求者之前,這些換行符將都被統(tǒng)一轉(zhuǎn)換成’\n’
- 如果是“(一個(gè)雙引號(hào)做為換行符),通用的模式被開(kāi)啟,但是返回給請(qǐng)求都之前,不會(huì)被轉(zhuǎn)換
- 如果是其它的合法的值,輸出的行將僅用給定的換行符進(jìn)行換行,并且換行符在返回給請(qǐng)求者之前不會(huì)被翻譯
 
- 如果是寫(xiě)入輸出一個(gè)數(shù)據(jù)流: - None: 任何’\n’ 換行符被轉(zhuǎn)換成系統(tǒng)默認(rèn)的換行符,可使用“os.linesep” 替換
- “ 或者是‘\n’ :不會(huì)轉(zhuǎn)換
- 其它:所有的’\n’字符將被轉(zhuǎn)換成給定的換行符。
 
closefd 指定關(guān)閉文件描述符
- 如果closefd 是False 并且 ”文件描述符(file descriptor)不是文件名給定的,文件關(guān)閉后底層系統(tǒng)的描述符將被保持打開(kāi),文件名稱指定的closefd 為T(mén)ure(默認(rèn)就是Ture) 否則會(huì)報(bào)出一個(gè)錯(cuò)誤。
opener
文件對(duì)象的各類操作方法
-  read() 
-  括號(hào)內(nèi)有參數(shù),什么都不加表示全讀出來(lái) 
-  數(shù)字做為參數(shù):按字位置,一次取一個(gè)字符,一個(gè)漢字也表示 一個(gè)字符 
-  closed() - 文件使用完后關(guān)閉文件的函數(shù)
 
-  write() - 執(zhí)行具體的寫(xiě)文件操作,可接收參數(shù)
- 直接將寫(xiě)入文件的內(nèi)容當(dāng)做參數(shù):這種是“覆蓋寫(xiě)”操作
- 如果有多個(gè)“write”方法操作,不會(huì)下一個(gè)覆蓋上一個(gè)的覆蓋寫(xiě),默認(rèn)不換行的“追加寫(xiě)”,如果需要換行則寫(xiě)入一個(gè)“換行符\n”
 
-  readline() - 按行讀取內(nèi)容,不像read() 方法一樣按字符取。
- 只到換行符就知道此行結(jié)束了
- 出現(xiàn)多次則連接的往后讀,并不是重復(fù)的讀同一行,其實(shí)內(nèi)部操作的“指針”定位
- 不帶任何表示一次讀一行
- 可輸入數(shù)字,表示一次性讀取多少字符,帶數(shù)字后與read比較像
- 注意 - 讀一次后會(huì)將光標(biāo)或者叫指針移動(dòng)到讀到的位置。
- readline() 可以出現(xiàn)多次,第二次讀就從第一次讀完成后的光標(biāo)所在處開(kāi)始讀(如下示例中有描述)
- 帶參數(shù)后并不是嚴(yán)格的一次輸出一整行
 
 
-  readlines() - 多行讀
- 不帶參數(shù)一次輸出所有行
- 默認(rèn)輸出為**列表**類型,原文本的一行為一個(gè)元素,一個(gè)元素一個(gè)下標(biāo)。且輸出結(jié)尾包含換行符
- 一次性全部讀取到內(nèi)存中,大文件不建議此操作。
- 數(shù)字做為參數(shù)表示: - 還是按字符個(gè)數(shù)計(jì)算,表示一次讀取多少個(gè)字符,但是因?yàn)閞eadlines()是列表輸出,所以一次必需輸出一行
- 只要輸入的數(shù)字小于1行的字符個(gè)數(shù),則整行都輸出到列表
- 如果輸入的數(shù)字大于1行的字符的個(gè)數(shù)且小于兩行的字符個(gè)數(shù),則輸出兩行到一個(gè)列表
- 具體可見(jiàn)下述示例
 
 
-  tell() - 檢測(cè)當(dāng)前光標(biāo)的位置
- 調(diào)用此方法可以顯示此指針?biāo)诘奈恢?/li>
- 位置的數(shù)量是字符占用的字符位個(gè)數(shù)
- Python3-UTF-8中一個(gè)中文占用3個(gè)字符
 
-  seek() - 接收的參數(shù)為數(shù)字,代表設(shè)置的指針的位置
- 調(diào)整指針?biāo)诘奈恢?/li>
 
-  flush() - 調(diào)用后,馬上將內(nèi)存緩沖區(qū)的數(shù)據(jù)同步到磁盤(pán)上永久存儲(chǔ)
- 寫(xiě)進(jìn)度條常用
 
-  truncate() - 截短
- 括號(hào)內(nèi)可跟數(shù)字參數(shù),默認(rèn)為-1
- 需要對(duì)文件有寫(xiě)的權(quán)限,如果為-1或者為空,默認(rèn)從最開(kāi)始的位置截到最后
- 指定的數(shù)字為參數(shù),截取多個(gè)個(gè)字符
- 如果打開(kāi)文件的時(shí)候是“w"權(quán)限,,如果文本本身有內(nèi)容,則打開(kāi)的時(shí)候文件就清空了,再截取就是空白字符,
- 如果是程序中操作寫(xiě)入字符后,再截短的,可正常截?cái)唷?/li>
- 如果打開(kāi)文件的時(shí)候是“a"權(quán)限,不會(huì)清空文檔。
 
-  fileno() - 文件描述符
 
-  isatty() - 判斷打開(kāi)的文件是否是一個(gè)終端設(shè)備
- 返回值為布爾值
 
-  readable() - 判斷打開(kāi)的文件是否可讀
 
-  writeable() - 判斷打開(kāi)的文件是否可寫(xiě)
 
各類方法示例:
- 支持參數(shù) - int :可接受一個(gè)數(shù)字,用于指定只顯示多少個(gè)字符 - 需要注意的是,在read的時(shí)候,英文中文都只占一個(gè)位置
 
 
- int :可接受一個(gè)數(shù)字,用于指定只顯示多少個(gè)字符 
read()
widowns下file使用相對(duì)路徑
file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.read())以下為輸出內(nèi)容 """ 《少年游.本意》金庸 青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。 誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。 """ file.close()file:直接填寫(xiě)了文件名,所以這里使用的是相對(duì)路徑,與程序的目錄在一起
windows下file使用絕對(duì)路徑
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.read()) file.close()輸出內(nèi)容與上面一樣,此處不張貼
指定讀取字符個(gè)數(shù)
import sys #導(dǎo)入一個(gè)sys模塊 print(sys.getdefaultencoding()) #打印當(dāng)前python的默認(rèn)編碼file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.read(8)) #打印前8個(gè)位置的字符""" utf-8 《少年游.本意》 """file.close()readline()
不帶參數(shù)
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readline())file.close()###############以下為輸出內(nèi)容############### """ 《少年游.本意》金庸 """帶數(shù)字參數(shù)
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readline(5)) #打印前5個(gè)位置的字符file.close()###############以下為輸出內(nèi)容############### """ 《少年游. """多次readline() 并觀察光標(biāo)(指針)的計(jì)數(shù)
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("還沒(méi)開(kāi)始讀時(shí):",file.tell()) print(file.readline(5)) print("第一次讀:",file.tell()) print(file.readline(5)) print("第二次讀:",file.tell()) print(file.readline(5)) print("第三次讀:",file.tell()) print(file.readline(5)) print("第四次讀:",file.tell()) print(file.readline(5)) print("第五次讀:",file.tell())file.close()###############以下為輸出內(nèi)容############### """ 還沒(méi)開(kāi)始讀時(shí): 0 《少年游. 第一次讀: 15 本意》金庸 第二次讀: 30第三次讀: 32 青衫磊落險(xiǎn) 第四次讀: 47 峰行。玉壁 第五次讀: 62"""readlines()
不帶參數(shù)
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readlines())file.close()###############以下為輸出內(nèi)容############### """ ['《少年游.本意》金庸\n', '青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。\n', '誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。']"""帶1個(gè)數(shù)字參數(shù)(數(shù)字為1小于一行的字符數(shù))
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readlines(1)) print(file.readlines(1)) print(file.readlines(1))file.close()###############以下為輸出內(nèi)容############### """ ['《少年游.本意》金庸\n'] ['青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。\n'] ['誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。']帶1個(gè)參數(shù)(每數(shù)字都小于每行的字符個(gè)數(shù))
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("還沒(méi)開(kāi)始讀時(shí):",file.tell()) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5))file.close()###############以下為輸出內(nèi)容############### """ 還沒(méi)開(kāi)始讀時(shí): 0 ['《少年游.本意》金庸\n'] ['青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。\n'] ['誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。'] [] """帶1個(gè)參數(shù)(大于一行的字符個(gè)數(shù))
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("還沒(méi)開(kāi)始讀時(shí):",file.tell()) print(file.readlines(11)) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5))file.close()###############以下為輸出內(nèi)容############### """ 還沒(méi)開(kāi)始讀時(shí): 0 ['《少年游.本意》金庸\n', '青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。\n'] ['誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。'] [] [] """mode=“w”:–探索w模式默認(rèn)的一上來(lái)就truncate()操作
#################w之前先讀取文件的內(nèi)容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("w模式之前讀取文件內(nèi)容:\n",file.read()) file.close() #查看之后一定要記得關(guān)閉這個(gè)打開(kāi)操作#################open()操作執(zhí)行w模式###################### file = open("少年游本意",mode="w",encoding="utf8") #其它參數(shù)默認(rèn)file.close()#################w之后先讀取文件的內(nèi)容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("w模式之后讀取文件內(nèi)容:\n",file.read()) file.close()###############以下為輸出內(nèi)容############### """ w模式之前讀取文件內(nèi)容:《少年游.本意》金庸 青衫磊落險(xiǎn)峰行。玉壁月華明。馬疾香幽。崖高人遠(yuǎn)。微步縠紋生。 誰(shuí)家子弟誰(shuí)家院。無(wú)計(jì)悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。 w模式之后讀取文件內(nèi)容:"""write()–往文件內(nèi)寫(xiě)內(nèi)容
write()–探索write()的覆蓋寫(xiě)操作
第一次使用wirite()寫(xiě)一行,然后再寫(xiě)一行,最后查看數(shù)據(jù)只有最后一次寫(xiě)的一行。此功能可用于臨時(shí)的文件,數(shù)據(jù)不用保存,但是需要臨時(shí)寫(xiě)一下文件。
seek() 設(shè)置指針(光標(biāo))的位置
tell() 獲取當(dāng)前指針(光標(biāo))的位置
file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print("還沒(méi)開(kāi)始讀時(shí):",file.tell()) print(file.readline(5)) print("第一次讀:",file.tell()) print(file.readline(5)) print("第二次讀:",file.tell()) print(file.readline(5)) print("第三次讀:",file.tell()) print(file.readline(5)) print("第四次讀:",file.tell()) print(file.readline(5)) print("第五次讀:",file.tell())file.close()###############以下為輸出內(nèi)容############### """ 還沒(méi)開(kāi)始讀時(shí): 0 《少年游. 第一次讀: 15 本意》金庸 第二次讀: 30第三次讀: 32 青衫磊落險(xiǎn) 第四次讀: 47 峰行。玉壁 第五次讀: 62 """flush() 將緩存中內(nèi)容寫(xiě)到磁盤(pán),刷寫(xiě)磁盤(pán)–打印一個(gè)進(jìn)度條顯示
方法一:使用sys模塊的stdout()
import sys,timefor i in range(50):sys.stdout.write("*")sys.stdout.flush()time.sleep(1) """ ************************************************** 結(jié)果是一個(gè)動(dòng)態(tài)的效果 """方法二:使用print()方法
for i in range(50):print("*",flush=True,end="")time.sleep(1)truncate() 截短
truncate 示例:探索truncate只截取指針(光標(biāo))之后的內(nèi)容
示例一:未使用seek定位光標(biāo)內(nèi)容
示例二:使用seek定位光標(biāo)內(nèi)容
fileno() 查看當(dāng)前文件的“文件描述符”
file = open("少年游本意",mode="w",encoding="utf8") #其它參數(shù)默認(rèn) print(file.fileno()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.fileno()) file.close() """ 3 3 """readable()-判斷文件是否可讀
file = open("少年游本意",mode="w",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readable()) print(file.writable()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readable()) print(file.writable()) file.close() """ False True True False """writeable()-判斷文件是否可寫(xiě)
file = open("少年游本意",mode="w",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readable()) print(file.writable()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數(shù)默認(rèn) print(file.readable()) print(file.writable()) file.close() """ False True True False """遍歷文件內(nèi)容
直接for循環(huán)每一行內(nèi)容
直接for循環(huán)readlines()每一行內(nèi)容(去掉print的換行符)
直接for 循環(huán)file的每一行
直接循環(huán)file的每一行,此種方法并不像readlines()方法一樣,全部加入到內(nèi)存,而是讀到該行的時(shí)候,將該行加入到內(nèi)存,讀完之后從后從內(nèi)存清空,對(duì)于特別大的文件必需使用此方法,否則內(nèi)存不夠。for循環(huán)內(nèi)部將file對(duì)象生成迭代器,不停的迭代新內(nèi)容。對(duì)于文本來(lái)說(shuō),用一行取一行。使用完后內(nèi)存釋放。建議使用這種機(jī)制
file = open("少年游本意",mode="r",encoding="utf8") for i in file:print(i,end="") # end="" 去掉print的換行符 """ 《少年游.本意》金庸 青衫磊落險(xiǎn)峰行。 玉壁月華明。 馬疾香幽。 崖高人遠(yuǎn)。 微步縠紋生。 誰(shuí)家子弟誰(shuí)家院。 無(wú)計(jì)悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """遍歷并修改指定行內(nèi)容
.strip() 可以去掉換行符
file = open("少年游本意",mode="r",encoding="utf8") lineNumber = 0 for i in file:lineNumber+=1if lineNumber == 6:i = " ".join([i.strip(),"This is test Line.\n"])print(i,end="") """ 少年游.本意》金庸 青衫磊落險(xiǎn)峰行。 玉壁月華明。 馬疾香幽。 崖高人遠(yuǎn)。 微步縠紋生。 This is test Line. 誰(shuí)家子弟誰(shuí)家院。 無(wú)計(jì)悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """不加.strip()
file = open("少年游本意",mode="r",encoding="utf8") lineNumber = 0 for i in file:lineNumber+=1if lineNumber == 6:i = " ".join([i,"This is test Line.\n"])print(i,end="") """ 《少年游.本意》金庸 青衫磊落險(xiǎn)峰行。 玉壁月華明。 馬疾香幽。 崖高人遠(yuǎn)。 微步縠紋生。This is test Line. 誰(shuí)家子弟誰(shuí)家院。 無(wú)計(jì)悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """將文件轉(zhuǎn)成“枚舉”后打印行號(hào)
file = open("少年游本意",mode="r",encoding="utf8") for i,v in enumerate(file.readlines()):print(i,v,end="") """ 0 《少年游.本意》金庸 1 青衫磊落險(xiǎn)峰行。 2 玉壁月華明。 3 馬疾香幽。 4 崖高人遠(yuǎn)。 5 微步縠紋生。 6 誰(shuí)家子弟誰(shuí)家院。 7 無(wú)計(jì)悔多情。 8 虎嘯龍吟。 9 換巢鸞鳳。 10 劍氣碧煙橫。 """with 語(yǔ)句
為了避免打開(kāi)文件后忘記關(guān)閉,可以通過(guò)with 管理上下下文
 with 語(yǔ)句是**"上下文管理器“**定義的一個(gè)方法,用于打包一些需要執(zhí)行的語(yǔ)句。這允許通用的” try…except…finally“ 一樣封裝一些便于重復(fù)使用的語(yǔ)句。
主要的使用方法如下:
with open("少年游本意",mode="r",encoding="utf8") as file:print(file.read())如上,當(dāng)file文件使用完成后,會(huì)自動(dòng)關(guān)閉該文件,釋放資源。
 多個(gè)文件同時(shí)管理:
總結(jié)
以上是生活随笔為你收集整理的Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 【P图神器】 人工智能魔术橡皮擦 jpg
- 下一篇: c++ libwebsocket库应用开
