python---文件讀寫-IO


IO----文件操作,讀操作

1、open('文件名','打開方式',mode[buff]);------------->第一個參數是文件路徑,第二個參數是打開方式(如果不寫,默認是只讀),第三個(可選)參數是設置讀寫文件的一個緩沖的大小
2、with open('文件名','打開方式')  as f----------------------------->第一種不需要記,只需要記住這種用法就行
         f.read([size]);------------------->使用read()方法讀取,其中size參數是設置讀寫的字節大小,超過的不讀取,。默認不設置就全部讀取
         f.readline([size]);----------------------->使用readline()方法讀取,意思是只讀取一行,其中size參數是設置讀寫的字節大小,超過的不讀取。。默認不設置就全部讀取
f.readlines([size(8192字節,IO下的buffer默認大小)]);[不推薦,若文件很大,會占用很大的內存空間]------------------------>使用readlines()方法讀取,意思是讀取文件中的每一行,並最終將每一行存入數組中返回,這樣訪問文件內容就可以像訪問數組一樣使用。 3、使用迭代器iter對文件內容進行讀取【推薦】(好處:迭代器不是將內容導入內存中,而是每次在next時,自動讀取下一條數據,這樣可以不消耗內存的前提下對)
f=open('文件名');
liter=iter(f);-------->將文件轉換成迭代器
lines=0;-------------->用來記錄行數
for lines in liter:
lines+=1;----------->遍歷文件,每次行數+1;

 

  

以上兩種方式的結果是一樣的(都是讀出該文檔中的所有內容為一個str對象),只不過第一種沒有關閉(f.close()操作),第二種默認會有(f.close()操作),一般都用第二種方法

3、w模式下(只寫),f.write('哈哈'),、f.writeline('的分對付對付對付')可以是列表元祖字符串[但必須是字符串所組成的序列]--------------------->這個是覆蓋原內容,添加,w模式下,沒有read()方法

4、a模式下(只寫,追加),f.write('你好')----------------------->這個是在原內容下,在末尾增加,a模式下,沒有read()方法

5、r模式下(只讀),read();-------------------------------->這個是讀取所有內容,以字符串輸出

6、r+模式下(讀寫),read(),write()------------------------->最常用噠,這個寫入是在原內容下,在頭部添加

7、w+模式(讀寫),read(),write()---------------------------->這個寫入跟w模式一樣,都是覆蓋原內容添加

8、與r相關的模式,文件必須存在,否則會報錯:IOERROR

9、與w相關的模式,文件可以不存在,如果不存在,直接創建

10、與b相關的模式,都是以二進制進行讀、寫、讀寫(用途:讀取一張圖片)

 

 

 

 

遇到的問題:

①、SyntaxError: Non-UTF-8 code starting with '\xce' :這個是編碼問題,在代碼的最頂部加上【# -*- coding: utf-8 -*-】即可

②、文檔中內容為【大家好】,但是使用read()打印出來是【鍩垮ぇ瀹跺ソ】

       

    檢查1:目前python 的文件編碼方式是【utf-8】,txt文檔的編碼格式也是【utf-8】,此時運行會出現②中的亂碼問題

   檢查2:在代碼中加入打開的格式,open(r'D:\Users\4399-3046\Desktop\test.txt', 'r',encoding='utf-8'),此時運行仍會報③中的錯誤

    檢查3:若把txt文檔的編碼格式改為其他,如【unicall】,此時運行仍會報③中的錯誤

   檢查4:修改項目的編碼格式:setting---Editor-----File Encoding------都設置為【UTF-8】,此時運行仍會出現②中亂碼問題

   檢查5:修改項目的讀取方式,改為w---再改為r,就正常了,原因未知

③、UnicodeEncodeError: 'gbk' codec can't encode character '\ufeff' in position 0: illegal multibyte sequence-------從代碼中可以看出肯定GBK是編碼的問題

④、UnicodeDecodeError: 'gbk' codec can't decode byte 0xa1 in position 22: illegal multibyte sequence------從代碼中可以看出肯定也是GBK編碼的問題

 嘗試1:在代碼中加入,忽略異常,open中加入(error='ignore')---結果不會再報上面的錯誤,但是會出現中文亂碼,如問題②中一樣-----這是解決以上辦法最簡單粗暴的方式

 

 

 嘗試2:在以上基礎上,open中加入(encoding='utf8')或encoding='utf-8'后正常,展示正常

 ⑤、文件最后為什么一定要關閉close操作:原因一:是為了將寫的內容同步到磁盤,原因二:是因為window操作系統打開的文件進程個數是有限的,原因三:如果打開的文件數達到上限,那么再次打開另一個文件是會失敗的

 

文件文件,緩存問題

①、調用close()方法

②、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM