對文件操作的基本步驟
f=open('a.txt','r',encoding='utf-8') data=f.read() print(data) f.close()
文件的打開和關閉使用open()、close()函數,文件剛打開時光標在最前面
open()函數的第一個參數為要打開的文件名,默認路徑為這個腳本所在路徑;第二個參數為打開模式,第三個參數為編碼格式
文件的打開模式如下,省略的話默認為只讀r,文件必須存在否則會報錯;使用只寫w模式打開,如果文件存在則先將原文件內容清空再寫,不存在則創建一個空文件再寫;使用讀寫模式a打開如果文件存在則在原文件內容上追加寫,不存在的話先創建
f.readable() 判斷文件是否可讀,返回True或False
f.readline() 每次讀取一行,當讀取到文件末尾時再執行readline讀取內容為空
f.readlines() 將文件所有內容讀出放到一個列表,每行內容為一個元素,例如['hello\n', 'hi\n', 'nice\n']
如果在文件打開時,指定newline=‘’,則換行的結果顯示為/r/n(windows平台的換行符為/r/n,unix和linux平台的換行符為/n)
f1=open('b.txt','r',encoding='utf-8') f2=open('b.txt','r',encoding='utf-8',newline='') print(f1.readlines()) print(f2.readlines()) f1.close() f2.close() 執行結果為 ['123\n', 'abc'] ['123\r\n', 'abc']
f.writable() 判斷文件是否可寫,返回True或False
f.closed 判斷文件是否關閉,返回True或False
f.write() 將內容寫入文件
f.writelines() 將列表內容寫入文件,f.writelines(['hello\n', 'hi\n', 'nice\n'])
f.encoding 文件打開時候的編碼
f.flush() 將內容中的內容刷到硬盤
直接使用open函數打開文件時,還需要手動關閉close文件,否則文件會一直占據內存。使用with open() as f打開文件則無需手動關閉,使用例子如下。
def file_operation(): with open('a.txt','a+',encoding='utf-8') as f: f.write('hello') print(f.read())
文件默認是以t即文本模式進行處理,
b為二進制模式,可以處理除了文本之外的圖片、音頻、視頻等格式的文件,還可以跨平台處理
f=open('test11.py','rb')------以b的方式打開文件時不能指定編碼
data=f.read()
print(data.decode('utf-8'))------讀取之后以utf-8格式對二進制進行解碼
f=open('test22.py','wb')
f.write(bytes('1111\n',encoding='utf-8'))--------bytes函數將指定內容以uft-8格式編碼為二進制
f.write('22222\n'.encode('utf-8'))----------encode直接將指定內容以uft-8格式編碼為二進制
文件內光標的移動
除去read( )是以字符進行讀取的,其他光標的移動都是以字節為單位進行的,如seek、tell、truncate
read(3)表示讀取3個字符
seek(3)表示光標向后移動3個字節,默認是從光標在文件最前面開始,也即seek(3,0)
光標的相對移動需要在打開時指定b模式,seek的第二個參數表示移動方式,0為默認方式,即從文件最開頭移動,1是相對上一次移動,2是從文件末尾移動
seek(3,1) 表示從光標上一次所在的位置向后移動3個字節
seek(-3,2)表示從文件末尾開始向前移動
truncate(3)表示截取文件前3個字節,必須以可寫的方式打開,w和w+除外
tell( )表示顯示當前光標所在的字節