我愛你,你是自由的。
python對文件的處理的兩個內建函數:
open()、file(),這個兩函數提供了初始化輸入\輸出(I\O)操作的通用接口。兩函數的功能相同。
基本用法:
file_object=open(filename, access_mode=’r’, buffering=-1)
file_object 是定義一個打開文件的對象
access_mode 是打開文件的模式;通常,文件使用模式 ‘r’,’w’,’a’ 來打開,分別代表,讀取,寫入,追加。
‘r’ 模式打開已經存在的文件
‘w’ 模式打開的文件若存在則首先清空,再加入內容。
‘a’ 這個模式是追加內容到文件中
註. ‘b’ 模式這個是打開二進制文件,對於unix-like/unix類型的系統’b’模式是可有可無的。
buffering 訪問文件所采用的緩沖方式。其中0表示不緩沖,1表示只緩沖一行數據,任何其它大於1的值代表使用給定的值作為緩沖區大小。不給定此參數或者參數為負數都表示使用系統默認的緩沖機制。
使用open打開文件之後一定記得調用close()關閉文件。
常用的文件訪問方式如下:
r 以讀方式打開
rU或Ua 以讀方式打開同時提供通用換行符支持
w 以寫方式打開
a 以追加方式打開
r+ 以讀寫方式打開
w+ 以讀寫方式打開
a+ 以讀寫方式打開
文件的輸入:
python中有三個方法來處理文件內容的輸入:
read() 一次讀取全部的文件內容。
readline() 每次讀取文件的一行。
readlines() 讀取文件的所有行,返回一個字符串列表。
寫數據:
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
寫入多行:
file_object.writelines(list_of_text_strings)
seek(offset,where): 默認值where=0表示從起始位置移動”offset”個字節,where=1表示從當前位置移動”offset”個字節,where=2表示從結束位置移動”offset”個字節。當有換行時,會被換行截斷。seek()無返回值,故值為None。
tell(): 文件的當前位置,即tell是獲得文件指針位置,受seek、readline、read、readlines影響,不受truncate影響。
truncate(n): 從文件的首行首字符開始截斷,截斷文件為n個字符;無n表示從當前位置起截斷;截斷之後n後面的所有字符被刪除。其中win下的換行代表2個字符大小。
fso = open("f:\\a.txt",'w+') #以w+方式,並非a方式打開文件,故文件原內容被清空
print fso.tell() #文件原內容被清空,故此時tell()=0
fso.write("abcde\n") #寫入文件abcde\n,因為換行\n占兩個字符,故共寫入7個字符
print fso.tell() #此時tell()=7
fso.write("fghwm") #又寫入文件fghwm,故此時文件共寫入7+5 =142個字符
print fso.tell() #此時tell()=12
fso.seek(1, 0) #從起始位置即文件首行首字符開始移動1個字符
print fso.tell() #此時tell() =1
print fso.readline() #讀取當前行,即文件的第1行,但是從第二個字符(tell()+1)開始讀,結果為:bcde。'若換成for讀取整個文件或read讀取整個文件則結果為bcdefghwm
print fso.tell() #因為readline此時tell() =7,
fso.truncate(8) #從寫入後文件的首行首字符開始階段,截斷為8個字符,即abcde\nf,即文件的內容為:abcde\nf
print fso.tell() #tell() 依舊為7,並為受truncate(8)影響,但是此時文件內容為abcde\nf
print fso.readline() #從tell()+1=8開始讀取,讀取當前行內容:f
fso.close()