日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python对文件的读写正确操作方式

發布時間:2023/11/28 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python对文件的读写正确操作方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.with open函數打開文件的各種方式

模式意義
r只讀模式打開文件,讀文件內容的指針會放在文件的開頭。 操作的文件必須存在。
rb以二進制格式、采用只讀模式打開文件,讀文件內容的指針位于文件的開頭,一般用于非文本文件,如圖片文件、音頻文件等。
r+打開文件后,既可以從頭讀取文件內容,也可以從開頭向文件中寫入新的內容,寫入的新內容會覆蓋文件中等長度的原有內容。
rb+以二進制格式、采用讀寫模式打開文件,讀寫文件的指針會放在文件的開頭,通常針對非文本文件(如音頻文件)。
w以只寫模式打開文件,若該文件存在,打開時會清空文件中原有的內容。 若文件存在,會清空其原有內容(覆蓋文件);反之,則創建新文件。
wb以二進制格式、只寫模式打開文件,一般用于非文本文件(如音頻文件)
w+打開文件后,會對原有內容進行清空,并對該文件有讀寫權限。
wb+以二進制格式、讀寫模式打開文件,一般用于非文本文件
a以追加模式打開一個文件,對文件只有寫入權限,如果文件已經存在,文件指針將放在文件的末尾(即新寫入內容會位于已有內容之后);反之,則會創建新文件。
ab以二進制格式打開文件,并采用追加模式,對文件只有寫權限。如果該文件已存在,文件指針位于文件末尾(新寫入文件會位于已有內容之后);反之,則創建新文件。
a+以讀寫模式打開文件;如果文件存在,文件指針放在文件的末尾(新寫入文件會位于已有內容之后);反之,則創建新文件。
ab+以二進制模式打開文件,并采用追加模式,對文件具有讀寫權限,如果文件存在,則文件指針位于文件的末尾(新寫入文件會位于已有內容之后);反之,則創建新文件。

注:
1.文件打開模式,直接決定了后續可以對文件做哪些操作。例如,使用 r 模式打開的文件,后續編寫的代碼只能讀取文件,而無法修改文件內容.
2.r開頭的操作的文件最好存在,w開頭的若文件存在,會清空其原有內容(覆蓋文件);反之,則創建新文件

2.封裝使用(后續再補充)

import platform
class L_File():def __init__(self):if platform.system().lower() == 'windows':self.l_os="win"elif platform.system().lower() == 'linux':self.l_os="liunx"else:self.l_os="其他系統,暫不支持"def r_file(self,path):"""讀取文件,無論文件存不存在,都可以放心使用,不存在會報異常錯誤:param path::return:"""try:if self.l_os=="win":with open(path,"rb") as f:content=f.read()return contentexcept Exception as e:print("r_file:",e)def w_file(self,path,data):"""寫入文件,返回字符長度如果該路徑文件不存在,則創建并寫入如果該路徑文件存在,則覆蓋寫入:param path::return:"""try:if self.l_os == "win":with open(path,"wb") as f:content=f.write(data)return contentexcept Exception as e:print("w_file:",e)def bytes_str(self,data,file_decode="utf-8"):"""字節轉字符串默認解碼格式utf-8:return:"""try:data=data.decode(file_decode)return dataexcept Exception as e:print("bytes_str",e)def str_bytes(self,data,file_encode="utf-8"):"""字符串轉字節默認編碼格式utf-8:return:"""try:data=data.encode(file_encode)return dataexcept Exception as e:print("str_bytes:",e)cc=L_File()
cont="你好!"
#字符串轉字節
b_cont=cc.str_bytes(cont)
print("b_cont:",b_cont)#寫入文件數據
cc.w_file('1.txt',b_cont)#讀取文件數據
data=cc.r_file("1.txt")
print("data:",data)#字節轉字符串
data1=cc.bytes_str(data)
print("data1:",data1)

3.python3默認編碼

python3默認編碼為unicode,由str類型進行表示。二進制數據使用bytes類型表示
字符串通過編碼轉換成字節碼,字節碼通過解碼成為字符串
encode:str --> bytes
decode:bytes --> str

phython3默認編碼是utf-8, 內存里(也就是字符串) 是編碼是unicode,即使聲明了某種編碼,在內存里還是unicode。

python2文件默認編碼是ASCII,字符串默認也是ASCII,但是如果文件頭聲明了某種編碼,那字符串編碼就是那個編碼。但是python2有一個問題,就是如果你想寫中文,你的文件頭聲明了utf-8,python2的解釋器會用你聲明的編碼去給你解碼,加載到內存后也是用utf-8給你解碼,而不是unicode!這就意味著,你用windows(中文版windwos默認編碼是gbk)去執行的話就會出現亂碼。因為在windows上只有2種情況 ,你的windows上顯示才不會亂:

  • 字符串以GBK格式顯示
  • 字符串是unicode編碼

為什么在內存中用utf-8會出現亂碼,用unicode就不會呢?原因如下:

utf-8雖然壓縮了存儲空間,但是如果在內存中存儲,使用utf-8卻由于它的長度不固定,帶來了很大的不便,使得在內存處理字符變得復雜。應對這個問題的解決策略是:在內存中存儲字符時還是使用unicode編碼,因為unicode編碼的長度固定,處理起來很方便。而在文件的存儲中,則使用utf-8編碼,可以壓縮內存,節省空間。這里一般有個自動轉換的機制,即從文件中讀取utf-8編碼到內存時,會自動轉換為unicode編碼,而從內存中將字符保存到文件時,則自動轉換為utf-8編碼。

總結

以上是生活随笔為你收集整理的python对文件的读写正确操作方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。