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()方法
②、