之前的代碼都是直接將數據輸出到控制檯,實際上咱們也能夠經過讀/寫文件的方式讀取/輸出到磁盤文件中,文件讀寫簡稱I/O操做。文件I/O操做一共分爲四部分:打開(open)/讀取(read)/寫入(write)/關閉(close)……python
在python中打開文件使用函數open(),該函數返回文件句柄,具體使用方法以下:微信
1ide 2函數 3編碼 4spa 5指針 |
file = open("文件名","打開文件模式")code
# 示例代碼:orm # 打開d:/1.txt文件,若是d盤沒有這個文件,會自動在d盤建立1.txt的空白文件,file是返回的文件句柄供讀/寫/關閉文件操做blog file = open("d:/1.txt","wb") |
其中,打開文件模式有如下幾種類型:
文件在打開讀寫以後記得要有關閉操做,就比如蹲完坑得擦屁股,關閉文件使用close()函數。注意:文件關閉以後,不能在繼續對文件讀寫操做,若是須要讀寫操做須要從新open()打開文件。
1 |
file.close() # 關閉文件 |
文件打開以後,能夠經過返回的文件句柄讀取文件中的內容,文件讀取有如下幾個函數:
1.file.read( [count] ) — count表示須要讀取的文字長度,conut是缺省參數,若是沒有設置count值,默認讀取整個文件全部內容,該函數返回讀取到的內容;
2.file.readline() — 讀取文件一行數據,返回讀取的內容
3.file.readlines() — 讀取文件的全部行內容,返回讀取的全部內容,注意:返回的數據類型是列表,列表中每一個數據都是文件中的一行數據;
4.注意:文件讀取返回的內容並不是字符串str類型,而是字節類型bytes類型,b’ ‘前綴表明的就是bytes.
若是想將bytes類型轉爲字符串直接使用bytes.decode()便可,decode()默認使用utf-8編碼;
假如d:/1.txt中的內容以下:
1 2 3 |
@Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累! |
文件讀取的三種方式示例代碼以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# 方法一: print("方法一:使用 read() 函數讀取txt內容") file_object = open("d:/1.txt","rb") contents = file_object.read() # 默認讀取全部內容
# 讀取文件內容,若是文件中含有中文須要decode()解碼,不然中文沒法顯示 print(contents) print("---"*20) # 使用decode()解碼中文,默認解碼格式爲utf-8 print("使用decode()函數解碼中文:") print(contents.decode()) file_object.close()
print("***"*20) # 方法二: print("方法二:使用 readline() 函數讀取txt內容") file_object = open("d:/1.txt","rb") while True: contents = file_object.readline() print(contents.decode())# 使用decode()解碼中文,默認解碼格式爲utf-8 if len(contents) == 0: # 讀取內容長度爲0,讀取結束 break file_object.close()
print("***"*20) # 方法三: print("方法三:使用 readlines() 函數讀取txt內容") file_object = open("d:/1.txt","rb") # readlines() 返回列表,一行數據就是列表中的一個元素 contents = file_object.readlines() # 遍歷列表 for content in contents: print(content.decode())# 使用decode()解碼中文,默認解碼格式爲utf-8 file_object.close() |
輸出結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
方法一:使用 read() 函數讀取txt內容
b'@Blog(\xe4\xb8\xaa\xe4\xba\xba\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9c\xb0\xe5\x9d\x80): shuopython.com\r\n@WeChat Official Account(\xe5\xbe\xae\xe4\xbf\xa1\xe5\x85\xac\xe4\xbc\x97\xe5\x8f\xb7)\xef\xbc\x9a\xe7\x8c\xbf\xe8\xaf\xb4python\r\n@Motto:\xe4\xb8\x8d\xe7\xa7\xaf\xe8\xb7\xac\xe6\xad\xa5\xe6\x97\xa0\xe4\xbb\xa5\xe8\x87\xb3\xe5\x8d\x83\xe9\x87\x8c\xef\xbc\x8c\xe4\xb8\x8d\xe7\xa7\xaf\xe5\xb0\x8f\xe6\xb5\x81\xe6\x97\xa0\xe4\xbb\xa5\xe6\x88\x90\xe6\xb1\x9f\xe6\xb5\xb7\xef\xbc\x8c\xe7\xa8\x8b\xe5\xba\x8f\xe4\xba\xba\xe7\x94\x9f\xe7\x9a\x84\xe7\xb2\xbe\xe5\xbd\xa9\xe9\x9c\x80\xe8\xa6\x81\xe5\x9d\x9a\xe6\x8c\x81\xe4\xb8\x8d\xe6\x87\x88\xe5\x9c\xb0\xe7\xa7\xaf\xe7\xb4\xaf\xef\xbc\x81\r\n' ------------------------------------------------------------ 使用decode()函數解碼中文: @Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!
************************************************************ 方法二:使用 readline() 函數讀取txt內容
@Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累!
************************************************************ 方法三:使用 readlines() 函數讀取txt內容
@Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累! |
文件寫入可經過函數write()完成,使用比較簡單,先看看語法:
file.write( [bytes] ) — 直接傳入 bytes 類型的字符便可,b」 「前綴表明的就是bytes.
使用比較簡單,直接上代碼:
1 2 3 4 5 6 7 8 9 |
file_object = open("d:/2.txt","wb")
# '\n' 是文件I/O中的換行符,寫完文件以後,自動換行 file_object.write(b"1234567\n") # 注意單引號和雙引號的配合使用 file_object.write(b"file_object.write(b'sad')\n") file_object.write(b"python \n")
file_object.close() |
d:/2.txt 的內容以下:
1 2 3 |
1234567 file_object.write(b'sad') python |
注意:寫入方式「wb」 ,每次寫入文件都會覆蓋上一次的內容,即寫入以前的內容會被清空;
有人看了上面read()函數的示例代碼可能會以爲頻繁的打開和關閉文件會比較麻煩。那麼僅僅打開和關閉文件一次,經過文件的偏移也能完成上述功能,文件的偏移使用 seek() 函數 。通常而言,seek()函數和tell()函數都搭配使用:
1.file.seek([offset],[whence]) — whence 表示偏移的位置,0表明從文件開頭開始算起,1表明從當前位置開始算起,2表明從文件末尾算起;offset 表示相對whence 偏移多少個字節;
2.file.tell() — 相對於文件開始位置,當前偏移的字節數,該函數也能夠用來計算整個文件的bytes長度;
注意:通常只要調用read/readline/readlines/write等函數,文件指針會自動發生偏移。
使用上面兩個函數的示例代碼以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
file_object = open("d:/2.txt","rb")
# 獲取當前的文件偏移,因爲還沒開始讀取內容,偏移量等於 0 count = file_object.tell() print(count) # 讀取文本全部數據內容,文件自動偏移到文件末尾 contents = file_object.read() # 獲取整個文件的偏移量 ,實際上就是文件內容的大小 count = file_object.tell() print(count) # 將文件指針偏移到文件開始位置 file_object.seek(0,0) # 讀取一行數據,按道理講應該是獲取第一行數據 contents = file_object.readline() print(contents.decode()) # 獲取當前偏移量 count = file_object.tell() print(count) # 繼續讀取一行數據 contents = file_object.readline() print(contents.decode()) # 獲取當前偏移量 count = file_object.tell() print(count) file_object.close() |
輸出內容:
1 2 3 4 5 6 |
0 474 python教程 - 猿說python : 第一行數據 www.shuopython.com 68 python教程 - 猿說python : 第二行數據 www.shuopython.com 136 |
1.file.read( [count] )函數能夠設置讀取指定的長度,例如:只讀取10個字符read(10);
2.file.readlines()返回值是列表,並不是bytes類型,而列表中的每個元素都是文件中的一行數據,類型是bytes類型;
3.若是文件讀取的內容含有中文,須要經過函數decode()解碼轉爲字符串,decode()默認爲utf-8解碼;
4.文件open以後記得close,養成良好的書寫習慣;
轉載請註明:猿說Python » python文件讀寫操做