總結Python中的open()方法
message= {'企業即時通信': 'aaa', '企業名稱': 'bbb'} with open("..\\r.txt", "a", encoding="utf-8") as f: f.write(json.dumps(message, ensure_ascii=False)+'\n') f.close()
opne()的第一個參數是路徑+文件名,第二個參數是mode打開模式,也就是說你要只讀,還是只寫,還是讀寫,第三個參數是編碼格式。
Mode打開模式的值:
Mode |
描述 |
r |
只讀,待打開文件必須存在 |
w |
只寫,如果待打開文件已存在,會先清空,不存在則創建 |
a |
只寫,如果文件已存在,不會清空,接着往后追加 |
r+ |
讀寫,文件必須存在 |
w+ |
讀寫,如果待打開文件已存在,會先清空,不存在則創建 |
a+ |
讀寫,如果文件已存在,不會清空,接着往后追加 |
如果想寫入的是圖片或者視頻音頻等,那么你需要用二進制形式寫入,也就是在mode的后面加一個b,比如下面這段就是將photo這張圖寫入a.png
import requests photo = requests.get("https://mail.263.net/custom_login/images/domain_logo.png") with open("..\\a.png", "wb") as f: f.write(photo.content) # photo.content是photo這張圖的二進制寫法 f.close()
with open("..\\a.png","r+b") as ff: pngdata = ff.read() print(pngdata) #打印出來的和photo.content內容一樣
注意為什么我要用with open as這種方式打開文件:
因為如果不使用這種方式,使用最簡單的 f = open(“a.png”),必須記得寫f.close().而且如果a.png沒有找到,會報IOError,這個時候f.close()就調用不到,如果想要無論有沒有打開文件都執行關閉文件,就要手動加上try finally…
With open as就不會這么麻煩,會自動幫我們調用f.close(),所以代碼中可以不必寫f.close()。
事例中的json.dumps(message, ensure_ascii=False)這句話,因為我的message是一個字典,如果要把message寫入文件,需要轉為字符串,所以使用json.dumps()方法,如果想要將dict類型寫入json文件也必須用這個方法轉換一下,而ensure_ascii=False這個參數是為了寫入漢字的時候就是寫入漢字,而不是ucs2編碼。