python基礎十三):文件讀寫,靠這一篇就夠了!

      網友投稿 1258 2025-03-31

      今天就帶著大家開始我們——Python學習的第十三課,Python基礎之文件讀寫。


      1、文件讀寫的流程

      2、文件讀寫的幾種常見模式(你不清楚的知識點)

      3、read、readline、readlines的區別

      4、對于一個10G的大文件,怎么高效的查看文件中的內容呢?

      找到word文檔

      打開word文檔

      查看(或操作)word文檔中的內容

      關閉word文檔

      獲取被打開的文件的內存對象,該內存對象又叫做“文件句柄”。

      通過這個內存對象(文件句柄),來對文件進行操作(讀取,寫入等操作)。

      關閉文件

      使用python讀取一個txt文件的時候,相當于把這個文件從硬盤上,讀取到了內存中。我們如果想要操作這個文件,是不是先要獲取這個文件對象?只有獲取這個文件對象后,才能夠真正的去操作這個文件,不管是讀取文件中的內容,還是向文件中寫入內容。

      這個“文件句柄”包含了文件的文件名、文件的字符集、文件的大小、文件在硬盤上的起始位置。

      python基礎(十三):文件讀寫,靠這一篇就夠了!

      f = open(r"G:Tipdm\file_read_write\yesterday.txt","r",encoding="utf-8") data = f.read() print(data[:245]) f.close()

      結果如下:

      f = open(r"G:\6Tipdm\file_read_write\yesterday.txt","r",encoding="utf-8") data = f.read() data1 = f.read() print(data[:245]) print("-------------------------------------") print(data1[:245]) f.close()

      結果如下:

      問題:我們讀取了2遍內容,為什么只顯示了一次讀取的結果呢?對于上述問題,我們用一張圖回答上述問題。

      通過上圖我們可以發現,當我們操作這個“文件句柄”的read()方法去讀取文件的時候,這個句柄會從文件的開頭位置1,移動到文件的結束位置2。如果不做任何操作,讀取完畢之后,句柄就會停止在2這個位置。因此當我們再次讀取文件的時候,該句柄是從2這個位置,往后面讀取內容。由于后面沒有任何內容,因此第二次讀取為空。

      那么,如果我們想要第二次同樣能夠讀取到文件中的內容,應該怎么辦呢?那么接著往下看。

      f = open(r"G:\6Tipdm\file_read_write\yesterday2.txt","w",encoding="utf-8") f.write("我愛北京天安門") f.close()

      結果如下:

      假如我們在寫一句“天安門上太陽升”,會出現啥情況呢?

      f = open(r"G:\6Tipdm\file_read_write\yesterday2.txt","w",encoding="utf-8") f.write("天安門上太陽升") f.write("很好,很好") f.close()

      結果如下:

      意外發生。當我們再次寫入新的內容的時候,發現之前寫的內容不見了,這是為啥呢?這就是我們下面要講述的“文件讀寫的幾種常見模式”。

      當我們讀取某個文件,向文件中寫入某些內容(覆蓋寫),向文件中追加寫入某寫內容時,最好的方式就是分別使用r、w、a這三種模式。對于這三種模式,要么讀,要么寫,讀模式就不能寫,寫模式就不能讀。

      對于r+、w+、a+這三種模式,如果你不是特別清楚python文件讀寫的原理,就不要輕易使用,因為會出現很多問題,下面我們僅演示r+、w+、a+這三種模式。

      對于這種模式,不管是讀取文件中的內容,還是朝文件中寫入內容。前提條件:文件存在。

      # 只讀取文件中的內容 f = open(r"G:\6Tipdm\file_read_write\yesterday1.txt","r+",encoding="utf-8") data = f.read() print(data) f.close() # 朝文件中寫入內容后,立即讀取,會出現啥問題? f = open(r"G:\6Tipdm\file_read_write\yesterday1.txt","r+",encoding="utf-8") f.write("麗麗姑娘") data = f.read() print(data) f.close() # 朝文件中寫入內容后,調整句柄位置后,再讀取,會出現啥問題? f = open(r"G:\6Tipdm\file_read_write\yesterday1.txt","r+",encoding="utf-8") f.write("麗麗姑娘") f.seek(0) data = f.read() print(data) f.close()

      結果如下:

      結果分析:

      使用r+模式,當只讀文件的時候,可以讀取到其中的內容。

      當寫入內容后,立即讀取文件內容,發現什么也讀取不到。這是由于當你寫入內容后,文件句柄會放在寫入內容的最后面,因此當你立即讀取的時候,句柄會從上次內容最后的位置,朝后面讀,因此讀取為空。

      當朝文件中寫入內容后,調整句柄位置后,再讀取文件中的內容,發現就有了內容。這是由于我們使用了f.seek(0)方法,將句柄由內容末尾調整到了內容開頭,因此就又有了內容。

      # 直接往文件中寫入內容 f = open(r"G:\6Tipdm\file_read_write\yesterday3.txt","w+",encoding="utf-8") f.write("bbbbbb") f.close() # 直接讀取上述文件,看看會發生啥問題?(特別注意這一步) f = open(r"G:\6Tipdm\file_read_write\yesterday3.txt","w+",encoding="utf-8") data = f.read() print(data) f.close() # 朝文件中寫入內容后,立即讀取,又會發生什么? f = open(r"G:\6Tipdm\file_read_write\yesterday3.txt","w+",encoding="utf-8") f.write("哈哈哈哈哈") data = f.read() print(data) f.close() # 朝文件中寫入內容后,調整句柄位置后,再讀取,會發生什么? f = open(r"G:\6Tipdm\file_read_write\yesterday3.txt","w+",encoding="utf-8") f.write("嘿嘿嘿嘿嘿") f.seek(0) data = f.read() print(data) f.close()

      結果如下:

      結果分析:

      使用w+模式,當我們直接朝文件中寫入bbbbbb,毋庸置疑,肯定是可以的。

      接著,我們直接讀取這個文件中的內容,奇怪的現象發生了,什么都讀取不到。這是因為w+模式,在進行文件讀取的時候,默認是先寫再讀。但是我們確實沒有寫入任何東西呀?這是由于系統默認幫我們寫入了一個空值,因此把原有內容覆蓋了。所以再當我們讀取文件中的內容的時候,發現讀取為空。

      再接著,我們朝文件中,寫入內容后再立即讀取,這下仍然讀取不到任何內容,這又是為什么呢?這是由于我們第一次寫入“哈哈哈哈哈哈”的時候,句柄移動到了內容最后。當我們立即讀取的時候,句柄從內容最后的位置,繼續朝后面讀,因此啥也沒有。

      最后,當朝文件中寫入內容后,調整句柄位置后,再讀取文件中的內容,發現就有了內容。這是由于我們使用了f.seek(0)方法,將句柄由內容末尾調整到了內容開頭,因此就又有了內容。

      # 直接朝文件中寫入內容 f = open(r"G:\6Tipdm\file_read_write\yesterday4.txt","a+",encoding="utf-8") f.write("哈哈") f.close() # 直接讀取文件中的內容 f = open(r"G:\6Tipdm\file_read_write\yesterday4.txt","a+",encoding="utf-8") data = f.read() print(data) f.close() # 調整句柄位置后,再讀取文件中的內容 f = open(r"G:\6Tipdm\file_read_write\yesterday4.txt","a+",encoding="utf-8") f.seek(0) data = f.read() print(data) f.close()

      結果如下:

      結果分析:

      使用a+模式,朝文件中寫入內容,毋庸置疑,肯定是沒問題的。

      接著,當我們讀取上述文件中的內容,會發現什么也讀取不到。這是由于,使用r+模式打開文件,文件句柄默認放在內容的最后面,因此你直接讀取其中的內容,什么也沒有。

      最后,在讀取文件中內容之前,我們使用了f.seek(0)方法,將句柄由內容末尾調整到了內容開頭,再次讀取文件中的內容,發現就有了內容。

      f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") data = f.read() print(type(data)) print(data) f.close()

      結果如下:

      f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") data = f.readline() print(type(data)) print(data) f.close() f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") for i in range(3): data = f.readline() print(data) f.close()

      結果如下:

      去掉每一行末尾的換行符:

      f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") for i in range(3): data = f.readline().strip() print(data) f.close()

      結果如下:

      f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8") data = f.readlines() print(type(data)) print(data) f.close()

      結果如下:

      當我們讀取文件中的內容,相當于是把寫在硬盤上的東西,讀取到內存中。不管你是使用read()或者readlines()一次性讀取到到內存中,還是使用readline()一行行的將整個內容讀取到內存中,如果文件很大,都將會耗用很大的內存。同時,從硬盤讀取文件內容到內存中,也會很慢。

      因此,有沒有一種高效的方式?既讓我們看到了文件中的內容,又不會占用內存呢?下面我們將進行說明。

      f = open(r"G:\6Tipdm\file_read_write\yesterday.txt","r",encoding="utf-8") for line in f: print(line.strip())

      部分截圖如下:

      結果說明:

      上述方式中,f相當于一個迭代器,我們使用for循環迭代f中元素。每循環一次,就相當于讀取一行到內存中,并記住這一次讀取到的位置。當進行下次迭代的時候,上一次讀取到內存中的內容,就會被銷毀了,當前內存中讀取的就是第二行的內容。當進行第三次循環的時候,內存中第二行的內容也會被銷毀,此時內存中只會保存第三行的內容,這樣依次進行下去。直到最后一次循環,讀取最后一行的內容,此時,內存中保留的也只是最后一行的內容。

      迭代器有一個特性:每次進行迭代的時候,就會記住當前讀取的位置。當進行下一次迭代的時候,前面的內容會被銷毀掉,在內存中只會保留當前循環得到的內容。

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:有個黑馬okr軟件嗎(okr軟件排行榜)
      下一篇:excel表格添加兩條斜線的教程(excel表格加兩個斜線)
      相關文章
      亚洲人成在线电影| 亚洲一区综合在线播放| 国产精品亚洲午夜一区二区三区| 久久狠狠高潮亚洲精品| 亚洲短视频男人的影院| 亚洲AV日韩AV鸥美在线观看| 香蕉蕉亚亚洲aav综合| 亚洲av无码一区二区三区乱子伦 | 亚洲国产综合人成综合网站00| 久久丫精品国产亚洲av不卡 | 亚洲妇女无套内射精| 亚洲AV无码资源在线观看| 亚洲αⅴ无码乱码在线观看性色| 亚洲AV无码一区二区三区电影| 亚洲国产精品无码久久98| 亚洲AV无码专区在线厂| 亚洲AV成人精品日韩一区18p| 亚洲精品成人久久久| 中文字幕在亚洲第一在线| 亚洲午夜国产精品无码老牛影视| 亚洲国产精品国自产拍AV| 水蜜桃亚洲一二三四在线| 久久精品国产亚洲AV嫖农村妇女 | 亚洲a∨无码一区二区| 国产成人综合亚洲绿色| 亚洲欧洲自拍拍偷精品 美利坚 | 亚洲人成人77777在线播放| 亚洲中文字幕一二三四区苍井空 | 亚洲AV午夜福利精品一区二区 | 亚洲黄色在线观看| 亚洲一卡二卡三卡| 亚洲欧好州第一的日产suv| 色噜噜噜噜亚洲第一| 亚洲伦乱亚洲h视频| 亚洲精品无码永久中文字幕| 亚洲人成依人成综合网| 亚洲一区中文字幕在线电影网| 亚洲一区二区三区成人网站| 精品亚洲成A人在线观看青青| 亚洲综合最新无码专区| 亚洲AV中文无码字幕色三|