以前的代碼都是直接將數(shù)據(jù)輸出到控制臺,實際上我們也可以通過讀/寫文件的方式讀取/輸出到磁盤文件中,文件讀寫簡稱I/O操作。文件I/O操作一共分為四部分:打開(open)/讀取(read)/寫入(write)/關閉(close)……
創(chuàng)新互聯(lián)主打移動網(wǎng)站、成都網(wǎng)站制作、成都網(wǎng)站建設、外貿營銷網(wǎng)站建設、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、域名與空間、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。在python中打開文件使用函數(shù)open(),該函數(shù)返回文件句柄,具體使用方法如下:
1 2 3 4 5 | file=open("文件名","打開文件模式") # 示例代碼: # 打開d:/1.txt文件,如果d盤沒有這個文件,會自動在d盤創(chuàng)建1.txt的空白文件,file是返回的文件句柄供讀/寫/關閉文件操作 file=open("d:/1.txt","wb") |
其中,打開文件模式有以下幾種類型:
文件在打開讀寫之后記得要有關閉操作,就好比蹲完坑得擦屁股,關閉文件使用close()函數(shù)。注意:文件關閉之后,不能在繼續(xù)對文件讀寫操作,如果需要讀寫操作需要重新open()打開文件。
1 | file.close()# 關閉文件 |
文件打開之后,可以通過返回的文件句柄讀取文件中的內容,文件讀取有以下幾個函數(shù):
1.file.read( [count] )?— count表示需要讀取的文字長度,conut是缺省參數(shù),如果沒有設置count值,默認讀取整個文件所有內容,該函數(shù)返回讀取到的內容;
2.file.readline()?— 讀取文件一行數(shù)據(jù),返回讀取的內容
3.file.readlines()?— 讀取文件的所有行內容,返回讀取的所有內容,注意:返回的數(shù)據(jù)類型是列表,列表中每個數(shù)據(jù)都是文件中的一行數(shù)據(jù);
4.注意:文件讀取返回的內容并非字符串str類型,而是字節(jié)類型bytes類型,b’ ‘前綴代表的就是bytes.??
如果想將bytes類型轉為字符串直接使用bytes.decode()即可,decode()默認使用utf-8編碼;
假如d:/1.txt中的內容如下:
1 2 3 | @Blog(個人博客地址):shuopython.com @WeChatOfficialAccount(微信公眾號):猿說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() 函數(shù)讀取txt內容") file_object=open("d:/1.txt","rb") contents=file_object.read()# 默認讀取所有內容 # 讀取文件內容,如果文件中含有中文需要decode()解碼,否則中文無法顯示 print(contents) print("---"*20) # 使用decode()解碼中文,默認解碼格式為utf-8 print("使用decode()函數(shù)解碼中文:") print(contents.decode()) file_object.close() print("***"*20) # 方法二: print("方法二:使用 readline() 函數(shù)讀取txt內容") file_object=open("d:/1.txt","rb") whileTrue: contents=file_object.readline() print(contents.decode())# 使用decode()解碼中文,默認解碼格式為utf-8 iflen(contents)==0:# 讀取內容長度為0,讀取結束 break file_object.close() print("***"*20) # 方法三: print("方法三:使用 readlines() 函數(shù)讀取txt內容") file_object=open("d:/1.txt","rb") # readlines() 返回列表,一行數(shù)據(jù)就是列表中的一個元素 contents=file_object.readlines() # 遍歷列表 forcontentincontents: 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()函數(shù)讀取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()函數(shù)解碼中文: @Blog(個人博客地址):shuopython.com @WeChatOfficialAccount(微信公眾號):猿說python @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! ************************************************************ 方法二:使用readline()函數(shù)讀取txt內容 @Blog(個人博客地址):shuopython.com @WeChatOfficialAccount(微信公眾號):猿說python @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! ************************************************************ 方法三:使用readlines()函數(shù)讀取txt內容 @Blog(個人博客地址):shuopython.com @WeChatOfficialAccount(微信公眾號):猿說python @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! |
文件寫入可通過函數(shù)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()函數(shù)的示例代碼可能會覺得頻繁的打開和關閉文件會比較麻煩。那么僅僅打開和關閉文件一次,通過文件的偏移也能完成上述功能,文件的偏移使用?seek()?函數(shù) 。一般而言,seek()函數(shù)和tell()函數(shù)都搭配使用:
1.file.seek([offset],[whence])?— whence 表示偏移的位置,0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起;offset 表示相對whence 偏移多少個字節(jié);
2.file.tell()?— 相對于文件開始位置,當前偏移的字節(jié)數(shù),該函數(shù)也可以用來計算整個文件的bytes長度;
注意:一般只要調用read/readline/readlines/write等函數(shù),文件指針會自動發(fā)生偏移。
使用上面兩個函數(shù)的示例代碼如下:
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) # 讀取文本所有數(shù)據(jù)內容,文件自動偏移到文件末尾 contents=file_object.read() # 獲取整個文件的偏移量 ,實際上就是文件內容的大小 count=file_object.tell() print(count) # 將文件指針偏移到文件開始位置 file_object.seek(0,0) # 讀取一行數(shù)據(jù),按道理講應該是獲取第一行數(shù)據(jù) contents=file_object.readline() print(contents.decode()) # 獲取當前偏移量 count=file_object.tell() print(count) # 繼續(xù)讀取一行數(shù)據(jù) 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:第一行數(shù)據(jù)www.shuopython.com 68 python教程-猿說python:第二行數(shù)據(jù)www.shuopython.com 136 |
1.file.read( [count] )函數(shù)可以設置讀取指定的長度,例如:只讀取10個字符read(10);
2.file.readlines()返回值是列表,并非bytes類型,而列表中的每一個元素都是文件中的一行數(shù)據(jù),類型是bytes類型;
3.如果文件讀取的內容含有中文,需要通過函數(shù)decode()解碼轉為字符串,decode()默認為utf-8解碼;
4.文件open之后記得close,養(yǎng)成良好的書寫習慣;
1.python列表推導式
2.python字典推導式
3.python return邏輯運算
轉載請注明:猿說Python???python文件讀寫操作
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:python文件讀寫操作(24)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://m.rwnh.cn/article46/djephg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、網(wǎng)站改版、網(wǎng)站收錄、自適應網(wǎng)站、App開發(fā)、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)