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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互

發布時間:2023/12/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 文件的操作
    • open()建立一個文件對象
    • 語法
    • butlin關于open()方法的英文解釋
    • open() 方法支持參數
      • file :文件的路徑 可以是絕對路徑,也可以是相對路徑
      • mode :操作文件的模式,可選參數,默認為“r”
      • buffering =
      • encoding
      • errors
      • newline :指定換行符
      • closefd 指定關閉文件描述符
      • opener
  • 文件對象的各類操作方法
    • 各類方法示例:
      • read()
        • widowns下file使用相對路徑
        • windows下file使用絕對路徑
        • 指定讀取字符個數
      • readline()
        • 不帶參數
        • 帶數字參數
        • 多次readline() 并觀察光標(指針)的計數
      • readlines()
        • 不帶參數
        • 帶1個數字參數(數字為1小于一行的字符數)
        • 帶1個參數(每數字都小于每行的字符個數)
        • 帶1個參數(大于一行的字符個數)
      • mode="w":--探索w模式默認的一上來就truncate()操作
      • write()--往文件內寫內容
      • write()--探索write()的覆蓋寫操作
      • seek() 設置指針(光標)的位置
      • tell() 獲取當前指針(光標)的位置
      • flush() 將緩存中內容寫到磁盤,刷寫磁盤--打印一個進度條顯示
        • 方法一:使用sys模塊的stdout()
      • truncate() 截短
        • truncate 示例:探索truncate只截取指針(光標)之后的內容
      • fileno() 查看當前文件的“文件描述符”
      • readable()-判斷文件是否可讀
      • writeable()-判斷文件是否可寫
  • 遍歷文件內容
    • 直接for循環每一行內容
    • 直接for循環readlines()每一行內容(去掉print的換行符)
    • 直接for 循環file的每一行
    • 遍歷并修改指定行內容
    • 將文件轉成“枚舉”后打印行號
  • with 語句

能調用方法的只有對象,文件本身也是一個對象

文件的操作

文件的操作過程:

  • 打開文件,拿到文件的操作句柄或叫文件描述符(File Descriptor)
  • 通過句柄對文件進行操作
  • 關閉文件
    • 養成良好的習慣,文件用完之后要使用“close()”關閉文件,也可以使用“with” 來打開文件,用完之后會自動關閉相應的文件
  • open()建立一個文件對象

    • 用于打開一個文件,并賦以相應的權限,打開的內容可以使用一個變量進行接收

    語法

    open ( file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None )

    butlin關于open()方法的英文解釋

    open() 方法支持參數

    file :文件的路徑 可以是絕對路徑,也可以是相對路徑

    + 絕對路徑:從文件系統的根開始 + 相對路徑:相對于程序文件目錄

    mode :操作文件的模式,可選參數,默認為“r”

    + r: read--讀文件操作,如果只有“r”參數,在文本模式中,文件是只讀不可寫的 + w: write--寫文件操作,如果是只有“w”參數,文件是只寫不可讀的,單獨使用此參數請注意,一旦創建這個文件對象,且有寫操作,則直接清空文件內容,如果沒有這個文件,則創建這個文件。原文為“open for writing, truncating the file first”,一旦開始,首先就截短文件為空白。 + x: exclusive 如果不存在這個文件就創建,如果文件已經存在則打開打敗。可用于創建文件前先判斷此文件是否已經存在 + a: append--往后面追加,也不能讀,與“w”一樣,都是寫,不同之處在于,無論當前的seek位置(指針位置,或者叫光標的位置)在哪里,a是往文件最后追加,默認情況下往最后直接寫,建議在寫之前先加一個“\n”換行符。 + b: 二進制模式 + t: 文本模式(默認模式) + +: 打開文件用于更新(讀和寫)- r+: 讀寫模式,從指針所在的位置往后寫,往哪兒寫要看指針所在位置,指針所在位置可以使用tell()方法查詢- w+: 寫讀模式,寫完一個數據后,指針就移到寫的末尾,如果此時再讀,要看后面有沒有內容。或者使用seek() 調整光標的位置- a+: 追加讀模式,與寫一樣,需要看打針所在的位置,因為a默認是從文件尾部追加,所以讀就從此后讀,所以不調整光標默認讀到的是空白

    buffering =

    + 是一個可選的數字參數,用于設置緩存策略- 0 : 關閉緩存(僅允許在二進制模式中)- 1 :行緩存(僅在文本模式中可用)- >1 :用于指明緩存的字節大小 + 當沒有二進程文件緩存至指定大小的框中,默認策略如下:- 二進制文件 固定緩存大小- 緩存的大小使用一種探索式的嘗試從度層設備的“塊大小”反饋來設置默認的緩存大小(DEFAULT_BUFFER_SIZE)- 在許多系統中,緩存的典型大小是4字節或者8字節。

    encoding

    + 用于標明文件內字符編碼 + 在文本模式下,如果“encoding”沒有手動指定,將使用操作系統平臺默認的locale,python3 會通過“locale.getpreferredencoding(False)”函數來獲取當前平臺的默認編碼。 + 二進制模式下,讀寫都使用裸字節,就是原始的0101直接發過去,所以保留了原始的編碼。

    errors

    + 是一個可選項 + 用于指定怎么對“encoding”,"decoding"所遇到的錯誤 + 不能用于二進制模式 + 各種各樣的標準錯誤處理方法都可以使用“error()”函數進行處理,標準和名稱包含如下:- ignore : 忽略,**注意**:忽略編碼錯誤會導致數據丟失- strict :嚴格,編碼錯誤時,提高異常錯誤的值,默認的值為None與strict有同樣的功能- replace :替換,編碼錯誤時,生成一個替換的標記(如“?”),然后插入到原文中,會看起來很難看。- surrogateescape :+ 不知道咋翻譯:從單詞上看“代理逃逸”:如遇到編碼錯誤,將使用“Unicode”的私有編碼,范圍從“U+DC80” 到“ U+DCFF”的來替換錯誤字節到原位置+ 對于處理一些不知道編碼的文件會很有用。- xmlcharrefreplace:+ 僅用于寫文件時,編碼不支持的字符,將會使用一個合適的XML特性,如&#nnn;- backslashreplace :+ 使用Python的 逃逸符“\”來代替原先畸形的數據- namereplace:+ 僅用于寫文件,+ 使用“\N”來替換不支持的字符

    newline :指定換行符

    • 僅用于“文本模式”
    • 用于控制如何換行,就是說明一下文件的換行符:
    • 換行符可以是:
      • None
      • "
      • ‘\n’
      • ‘\r’
      • ‘\r\n’
    • 如果從一個數據流中輸入數據:
      • 換行符是None,使用的是通用的換行模式,一行的結束可以是‘\n’,’\r’或者是’\r\n’,在將數據返回給請求者之前,這些換行符將都被統一轉換成’\n’
      • 如果是“(一個雙引號做為換行符),通用的模式被開啟,但是返回給請求都之前,不會被轉換
      • 如果是其它的合法的值,輸出的行將僅用給定的換行符進行換行,并且換行符在返回給請求者之前不會被翻譯
    • 如果是寫入輸出一個數據流:
      • None: 任何’\n’ 換行符被轉換成系統默認的換行符,可使用“os.linesep” 替換
      • “ 或者是‘\n’ :不會轉換
      • 其它:所有的’\n’字符將被轉換成給定的換行符。

    closefd 指定關閉文件描述符

    • 如果closefd 是False 并且 ”文件描述符(file descriptor)不是文件名給定的,文件關閉后底層系統的描述符將被保持打開,文件名稱指定的closefd 為Ture(默認就是Ture) 否則會報出一個錯誤。

    opener

    文件對象的各類操作方法

    • read()

    • 括號內有參數,什么都不加表示全讀出來

    • 數字做為參數:按字位置,一次取一個字符,一個漢字也表示 一個字符

    • closed()

      • 文件使用完后關閉文件的函數
    • write()

      • 執行具體的寫文件操作,可接收參數
      • 直接將寫入文件的內容當做參數:這種是“覆蓋寫”操作
      • 如果有多個“write”方法操作,不會下一個覆蓋上一個的覆蓋寫,默認不換行的“追加寫”,如果需要換行則寫入一個“換行符\n”
    • readline()

      • 按行讀取內容,不像read() 方法一樣按字符取。
      • 只到換行符就知道此行結束了
      • 出現多次則連接的往后讀,并不是重復的讀同一行,其實內部操作的“指針”定位
      • 不帶任何表示一次讀一行
      • 可輸入數字,表示一次性讀取多少字符,帶數字后與read比較像
      • 注意
        • 讀一次后會將光標或者叫指針移動到讀到的位置。
        • readline() 可以出現多次,第二次讀就從第一次讀完成后的光標所在處開始讀(如下示例中有描述)
        • 帶參數后并不是嚴格的一次輸出一整行
    • readlines()

      • 多行讀
      • 不帶參數一次輸出所有行
      • 默認輸出為**列表**類型,原文本的一行為一個元素,一個元素一個下標。且輸出結尾包含換行符
      • 一次性全部讀取到內存中,大文件不建議此操作。
      • 數字做為參數表示:
        • 還是按字符個數計算,表示一次讀取多少個字符,但是因為readlines()是列表輸出,所以一次必需輸出一行
        • 只要輸入的數字小于1行的字符個數,則整行都輸出到列表
        • 如果輸入的數字大于1行的字符的個數且小于兩行的字符個數,則輸出兩行到一個列表
        • 具體可見下述示例
    • tell()

      • 檢測當前光標的位置
      • 調用此方法可以顯示此指針所在的位置
      • 位置的數量是字符占用的字符位個數
      • Python3-UTF-8中一個中文占用3個字符
    • seek()

      • 接收的參數為數字,代表設置的指針的位置
      • 調整指針所在的位置
    • flush()

      • 調用后,馬上將內存緩沖區的數據同步到磁盤上永久存儲
      • 寫進度條常用
    • truncate()

      • 截短
      • 括號內可跟數字參數,默認為-1
      • 需要對文件有寫的權限,如果為-1或者為空,默認從最開始的位置截到最后
      • 指定的數字為參數,截取多個個字符
      • 如果打開文件的時候是“w"權限,,如果文本本身有內容,則打開的時候文件就清空了,再截取就是空白字符,
      • 如果是程序中操作寫入字符后,再截短的,可正常截斷。
      • 如果打開文件的時候是“a"權限,不會清空文檔。
    • fileno()

      • 文件描述符
    • isatty()

      • 判斷打開的文件是否是一個終端設備
      • 返回值為布爾值
    • readable()

      • 判斷打開的文件是否可讀
    • writeable()

      • 判斷打開的文件是否可寫

    各類方法示例:

    • 支持參數
      • int :可接受一個數字,用于指定只顯示多少個字符
        • 需要注意的是,在read的時候,英文中文都只占一個位置

    read()

    widowns下file使用相對路徑

    file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.read())以下為輸出內容 """ 《少年游.本意》金庸 青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。 誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。 """ file.close()

    file:直接填寫了文件名,所以這里使用的是相對路徑,與程序的目錄在一起

    windows下file使用絕對路徑

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.read()) file.close()

    輸出內容與上面一樣,此處不張貼

    指定讀取字符個數

    import sys #導入一個sys模塊 print(sys.getdefaultencoding()) #打印當前python的默認編碼file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.read(8)) #打印前8個位置的字符""" utf-8 《少年游.本意》 """file.close()

    readline()

    不帶參數

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readline())file.close()###############以下為輸出內容############### """ 《少年游.本意》金庸 """

    帶數字參數

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readline(5)) #打印前5個位置的字符file.close()###############以下為輸出內容############### """ 《少年游. """

    多次readline() 并觀察光標(指針)的計數

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 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()) print(file.readline(5)) print("第五次讀:",file.tell())file.close()###############以下為輸出內容############### """ 還沒開始讀時: 0 《少年游. 第一次讀: 15 本意》金庸 第二次讀: 30第三次讀: 32 青衫磊落險 第四次讀: 47 峰行。玉壁 第五次讀: 62"""

    readlines()

    不帶參數

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readlines())file.close()###############以下為輸出內容############### """ ['《少年游.本意》金庸\n', '青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。\n', '誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。']"""

    帶1個數字參數(數字為1小于一行的字符數)

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readlines(1)) print(file.readlines(1)) print(file.readlines(1))file.close()###############以下為輸出內容############### """ ['《少年游.本意》金庸\n'] ['青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。\n'] ['誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。']

    帶1個參數(每數字都小于每行的字符個數)

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print("還沒開始讀時:",file.tell()) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5))file.close()###############以下為輸出內容############### """ 還沒開始讀時: 0 ['《少年游.本意》金庸\n'] ['青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。\n'] ['誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。'] [] """

    帶1個參數(大于一行的字符個數)

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 print("還沒開始讀時:",file.tell()) print(file.readlines(11)) print(file.readlines(5)) print(file.readlines(5)) print(file.readlines(5))file.close()###############以下為輸出內容############### """ 還沒開始讀時: 0 ['《少年游.本意》金庸\n', '青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。\n'] ['誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。'] [] [] """

    mode=“w”:–探索w模式默認的一上來就truncate()操作

    #################w之前先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之前讀取文件內容:\n",file.read()) file.close() #查看之后一定要記得關閉這個打開操作#################open()操作執行w模式###################### file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認file.close()#################w之后先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之后讀取文件內容:\n",file.read()) file.close()###############以下為輸出內容############### """ w模式之前讀取文件內容:《少年游.本意》金庸 青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。 誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。 w模式之后讀取文件內容:"""

    write()–往文件內寫內容

  • 寫之前先讀一下文件內的內容
  • 開始寫操作,并且執行3次write,最后加上換行符\n
  • 寫之后再讀一次文件的內容
  • #################w之前先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之前讀取文件內容:\n",file.read()) file.close() #查看之后一定要記得關閉這個打開操作#################open()操作執行w模式###################### file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 file.write(" 先帝創業未半而中道崩殂,今天下三分,益州疲弊,此誠危急存亡之秋也。然侍衛之臣不懈于內,忠志之士忘身于外者,蓋追先帝之殊遇,欲報之于陛下也。誠宜開張圣聽,以光先帝遺德,恢弘志士之氣,不宜妄自菲薄,引喻失義,以塞忠諫之路也。\n ") file.write(" 宮中府中,俱為一體,陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其刑賞,以昭陛下平明之理,不宜偏私,使內外異法也。侍中、侍郎郭攸之、費祎、董允等,此皆良實,志慮忠純,是以先帝簡拔以遺陛下。愚以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補闕漏,有所廣益。\n ") file.write(" 將軍向寵,性行淑均,曉暢軍事,試用于昔日,先帝稱之曰能,是以眾議舉寵為督。愚以為營中之事,悉以咨之,必能使行陣和睦,優劣得所。親賢臣,遠小人,此先漢所以興隆也;親小人,遠賢臣,此后漢所以傾頹也。先帝在時,每與臣論此事,未嘗不嘆息痛恨于桓、靈也。侍中、尚書、長史、參軍,此悉貞良死節之臣,愿陛下親之信之,則漢室之隆,可計日而待也。 \n") file.close()#################w之后先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之后讀取文件內容:\n",file.read()) file.close()###############以下為輸出內容############### """ w模式之前讀取文件內容:先帝創業未半而中道崩殂,今天下三分,益州疲弊,此誠危急存亡之秋也。然侍衛之臣不懈于內,忠志之士忘身于外者,蓋追先帝之殊遇,欲報之于陛下也。誠宜開張圣聽,以光先帝遺德,恢弘志士之氣,不宜妄自菲薄,引喻失義,以塞忠諫之路也。 宮中府中,俱為一體,陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其刑賞,以昭陛下平明之理,不宜偏私,使內外異法也。侍中、侍郎郭攸之、費祎、董允等,此皆良實,志慮忠純,是以先帝簡拔以遺陛下。愚以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補闕漏,有所廣益。 將軍向寵,性行淑均,曉暢軍事,試用于昔日,先帝稱之曰能,是以眾議舉寵為督。愚以為營中之事,悉以咨之,必能使行陣和睦,優劣得所。親賢臣,遠小人,此先漢所以興隆也;親小人,遠賢臣,此后漢所以傾頹也。先帝在時,每與臣論此事,未嘗不嘆息痛恨于桓、靈也。侍中、尚書、長史、參軍,此悉貞良死節之臣,愿陛下親之信之,則漢室之隆,可計日而待也。 w模式之后讀取文件內容:先帝創業未半而中道崩殂,今天下三分,益州疲弊,此誠危急存亡之秋也。然侍衛之臣不懈于內,忠志之士忘身于外者,蓋追先帝之殊遇,欲報之于陛下也。誠宜開張圣聽,以光先帝遺德,恢弘志士之氣,不宜妄自菲薄,引喻失義,以塞忠諫之路也。宮中府中,俱為一體,陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其刑賞,以昭陛下平明之理,不宜偏私,使內外異法也。侍中、侍郎郭攸之、費祎、董允等,此皆良實,志慮忠純,是以先帝簡拔以遺陛下。愚以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補闕漏,有所廣益。將軍向寵,性行淑均,曉暢軍事,試用于昔日,先帝稱之曰能,是以眾議舉寵為督。愚以為營中之事,悉以咨之,必能使行陣和睦,優劣得所。親賢臣,遠小人,此先漢所以興隆也;親小人,遠賢臣,此后漢所以傾頹也。先帝在時,每與臣論此事,未嘗不嘆息痛恨于桓、靈也。侍中、尚書、長史、參軍,此悉貞良死節之臣,愿陛下親之信之,則漢室之隆,可計日而待也。 """

    write()–探索write()的覆蓋寫操作

  • 寫之前先讀一下文件內的內容
  • 寫第一次文件,寫完后關閉文件
  • 寫第二次文件,寫完后關閉文件
  • 寫之后再讀一次文件的內容
    第一次使用wirite()寫一行,然后再寫一行,最后查看數據只有最后一次寫的一行。此功能可用于臨時的文件,數據不用保存,但是需要臨時寫一下文件。
  • #################w之前先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之前讀取文件內容:\n",file.read()) file.close() #查看之后一定要記得關閉這個打開操作#################open()操作執行w模式###################### file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 file.write(" 先帝創業未半而中道崩殂,今天下三分,益州疲弊,此誠危急存亡之秋也。然侍衛之臣不懈于內,忠志之士忘身于外者,蓋追先帝之殊遇,欲報之于陛下也。誠宜開張圣聽,以光先帝遺德,恢弘志士之氣,不宜妄自菲薄,引喻失義,以塞忠諫之路也。\n ") file.close()#################open()操作執行w模式###################### file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 file.write(" 宮中府中,俱為一體,陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其刑賞,以昭陛下平明之理,不宜偏私,使內外異法也。侍中、侍郎郭攸之、費祎、董允等,此皆良實,志慮忠純,是以先帝簡拔以遺陛下。愚以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補闕漏,有所廣益。\n ") file.close()#################w之后先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("w模式之后讀取文件內容:\n",file.read()) file.close()###############以下為輸出內容############### """ w模式之前讀取文件內容:《少年游.本意》金庸 青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。 誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。 w模式之后讀取文件內容:宮中府中,俱為一體,陟罰臧否,不宜異同。若有作奸犯科及為忠善者,宜付有司論其刑賞,以昭陛下平明之理,不宜偏私,使內外異法也。侍中、侍郎郭攸之、費祎、董允等,此皆良實,志慮忠純,是以先帝簡拔以遺陛下。愚以為宮中之事,事無大小,悉以咨之,然后施行,必能裨補闕漏,有所廣益。"""

    seek() 設置指針(光標)的位置

  • 打開一個文件使用read讀兩行
  • seek光標到0
  • 讀第三次
  • seek光標到0
  • 讀第四次
  • 查看結果
  • file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print("第一次讀12個位置:",file.read(12)) print("第二次讀15個位置:",file.read(15)) file.seek(0) print("第三次讀12個位置:",file.read(12)) file.seek(0) print("第四次讀15個位置:",file.read(15)) file.close() #查看之后一定要記得關閉這個打開操作 """ 第一次讀12個位置: 臣本布衣,躬耕于南陽, 第二次讀15個位置: 茍全性命于亂世,不求聞達于諸侯 第三次讀12個位置: 臣本布衣,躬耕于南陽, 第四次讀15個位置: 臣本布衣,躬耕于南陽,茍全性"""

    tell() 獲取當前指針(光標)的位置

    file = open("C:\少年游本意",mode="r",encoding="utf8") #其它參數默認 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()) print(file.readline(5)) print("第五次讀:",file.tell())file.close()###############以下為輸出內容############### """ 還沒開始讀時: 0 《少年游. 第一次讀: 15 本意》金庸 第二次讀: 30第三次讀: 32 青衫磊落險 第四次讀: 47 峰行。玉壁 第五次讀: 62 """

    flush() 將緩存中內容寫到磁盤,刷寫磁盤–打印一個進度條顯示

    方法一:使用sys模塊的stdout()

    import sys,timefor i in range(50):sys.stdout.write("*")sys.stdout.flush()time.sleep(1) """ ************************************************** 結果是一個動態的效果 """

    方法二:使用print()方法

    for i in range(50):print("*",flush=True,end="")time.sleep(1)

    truncate() 截短

    truncate 示例:探索truncate只截取指針(光標)之后的內容

    示例一:未使用seek定位光標內容

  • w模式寫入文件
  • truncate
  • print查看內容
  • 結果為寫入的兩行
  • file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 file.write("臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 \n") file.truncate() file.write("臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 \n") #file.seek(0) file.truncate() file.close() #################w之前先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") print("truncate后:\n",file.read()) file.close()"""truncate后:臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 """

    示例二:使用seek定位光標內容

  • w模式寫入文件
  • seek光標位置為0后
  • truncate
  • print查看內容
  • 結果為空
  • file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 file.write("臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 \n") file.truncate() file.write("臣本布衣,躬耕于南陽,茍全性命于亂世,不求聞達于諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣于草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。后值傾覆,受任于敗軍之際,奉命于危難之間,爾來二十有一年矣。 \n") file.seek(0) file.truncate() file.close() #################w之前先讀取文件的內容并輸出查看一遍###################### file = open("少年游本意",mode="r",encoding="utf8") print("truncate后:\n",file.read()) file.close()""" truncate后:"""

    fileno() 查看當前文件的“文件描述符”

    file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 print(file.fileno()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.fileno()) file.close() """ 3 3 """

    readable()-判斷文件是否可讀

    file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 print(file.readable()) print(file.writable()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readable()) print(file.writable()) file.close() """ False True True False """

    writeable()-判斷文件是否可寫

    file = open("少年游本意",mode="w",encoding="utf8") #其它參數默認 print(file.readable()) print(file.writable()) file.close()file = open("少年游本意",mode="r",encoding="utf8") #其它參數默認 print(file.readable()) print(file.writable()) file.close() """ False True True False """

    遍歷文件內容

    直接for循環每一行內容

  • 每行下面有一個換行符,是因為print本身有一個換行,而文本內容內也有一個換行符,所以換了兩次行
  • file = open("少年游本意",mode="r",encoding="utf8") #print(file.read()) for i in file.readlines():print(i)""" 《少年游.本意》金庸青衫磊落險峰行。玉壁月華明。馬疾香幽。崖高人遠。微步縠紋生。誰家子弟誰家院。無計悔多情。虎嘯龍吟。換巢鸞鳳。劍氣碧煙橫。"""

    直接for循環readlines()每一行內容(去掉print的換行符)

  • 使用end="" 將print的換行符取消
  • file = open("少年游本意",mode="r",encoding="utf8") #print(file.read()) for i in file.readlines():print(i,end="")""" 《少年游.本意》金庸 青衫磊落險峰行。 玉壁月華明。 馬疾香幽。 崖高人遠。 微步縠紋生。 誰家子弟誰家院。 無計悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """

    直接for 循環file的每一行

    直接循環file的每一行,此種方法并不像readlines()方法一樣,全部加入到內存,而是讀到該行的時候,將該行加入到內存,讀完之后從后從內存清空,對于特別大的文件必需使用此方法,否則內存不夠。for循環內部將file對象生成迭代器,不停的迭代新內容。對于文本來說,用一行取一行。使用完后內存釋放。建議使用這種機制

    file = open("少年游本意",mode="r",encoding="utf8") for i in file:print(i,end="") # end="" 去掉print的換行符 """ 《少年游.本意》金庸 青衫磊落險峰行。 玉壁月華明。 馬疾香幽。 崖高人遠。 微步縠紋生。 誰家子弟誰家院。 無計悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """

    遍歷并修改指定行內容

    .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="") """ 少年游.本意》金庸 青衫磊落險峰行。 玉壁月華明。 馬疾香幽。 崖高人遠。 微步縠紋生。 This is test Line. 誰家子弟誰家院。 無計悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """

    不加.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="") """ 《少年游.本意》金庸 青衫磊落險峰行。 玉壁月華明。 馬疾香幽。 崖高人遠。 微步縠紋生。This is test Line. 誰家子弟誰家院。 無計悔多情。 虎嘯龍吟。 換巢鸞鳳。 劍氣碧煙橫。 """

    將文件轉成“枚舉”后打印行號

    file = open("少年游本意",mode="r",encoding="utf8") for i,v in enumerate(file.readlines()):print(i,v,end="") """ 0 《少年游.本意》金庸 1 青衫磊落險峰行。 2 玉壁月華明。 3 馬疾香幽。 4 崖高人遠。 5 微步縠紋生。 6 誰家子弟誰家院。 7 無計悔多情。 8 虎嘯龍吟。 9 換巢鸞鳳。 10 劍氣碧煙橫。 """

    with 語句

    為了避免打開文件后忘記關閉,可以通過with 管理上下下文
    with 語句是**"上下文管理器“**定義的一個方法,用于打包一些需要執行的語句。這允許通用的” try…except…finally“ 一樣封裝一些便于重復使用的語句。

    with_stmt ::= "with" with_item ("," with_item)* ":" suite with_item ::= expression ["as" target]

    主要的使用方法如下:

    with open("少年游本意",mode="r",encoding="utf8") as file:print(file.read())

    如上,當file文件使用完成后,會自動關閉該文件,釋放資源。
    多個文件同時管理:

    with open("少年游本意",mode="r",encoding="utf8") as file , open("c:\少年游本意",mode="w",encoding="utf8") as file2:print(file.read())print(file2.read())

    總結

    以上是生活随笔為你收集整理的Python Basic - Python open() 、closed()、write()、read()、 readline()、readlines()、with与文件进行交互的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。