標籤:開啟檔案 效果 error: soft 又能 轉換 ike typeerror size
#寫和讀取時候,所有的資料只能是字串,不能是數字或者其他內容#建立一個檔案;冰倩寫入檔案內容為:這是一個新的檔案內容f = open(‘a.txt‘,"w",encoding="utf8")f.write("這是一個新的檔案內容\n") #寫入操作 \n斷行符號換行f.write("這是一個新的檔案內容\n") #寫入操作f.writelines([‘111\n‘,‘222\n‘]) #列表方式寫入多行print(f.writable()) # 判斷是否可寫f.close()#開啟檔案,讀取檔案內容,不寫‘r‘,預設是唯讀模式r = open("a.txt",‘r‘,encoding="utf8")data = r.read() #讀取全部內容print(data)print(r.readable()) #判斷檔案是否唯讀print(r.readline()) #一次讀一行內容,下一行內容可以在接著運行readline,預設最後一行內容有個斷行符號,會有換行的情況print(r.readline(),end="") #去掉最後的斷行符號print(r.readlines()) #讀取所有的內容,把每行的內容放到一個列表中,預設最後一行有空格r.close()#追加f = open(‘a.txt‘,"a",encoding="utf8")f.write("這是追加的內容\n")f.close()#r+ 既能讀又能寫# f = open(‘a.txt‘,"r+",encoding="utf8")# f.write("這是r+的內容\n") #預設第一行開始寫入,把存在的內容直接按順序覆蓋修改# f.close()#開啟不用關閉檔案 用with就可以,自動會關閉檔案with open(‘a.txt‘,‘r‘,encoding="utf8") as f: data = f.read() print(data)# str ---- > encoding(編碼) ----->bytes# btyes ---> encode(解碼) ------->str#open模式‘‘‘不填寫預設 ‘r‘ open for reading (default) ‘w‘ open for writing, truncating the file first ‘x‘ create a new file and open it for writing ‘a‘ open for writing, appending to the end of the file if it exists ‘b‘ binary mode不填寫預設 ‘t‘ text mode (default) ‘+‘ open a disk file for updating (reading and writing) ‘U‘ universal newline mode (deprecated)‘‘‘#b模式就是二進位的方式:#寫f = open(‘二進位檔案‘,‘wb‘) # wb 二進位方式寫入檔案,二進位檔案沒有編碼,只有解碼#f.write(‘1111,你好‘) #報錯 TypeError: a bytes-like object is required, not ‘str‘ 二進位檔案寫入,需要以二進位的方式,不能直接把str寫到裡面#處理方式: 可以先把字串轉換成二進位的方式在寫入#字串轉二進位過程(編碼):test = bytes(‘1111,你好‘,encoding="utf-8") #bytes 和 ‘1111,你好‘.encode="utf-8 編碼都是一樣的;一個是bytes方法 一個是字串自己提供的一個方法f.write(test)#讀f = open(‘二進位檔案‘,‘rb‘) #二進位的方式讀取檔案data = f.read()print(data) #b‘1111,\xe4\xbd\xa0\xe5\xa5\xbd‘讀取的是二進位的檔案,所以需要解碼成字串.#二進位轉字串過程(解碼):print(data.decode(‘utf-8‘)) #解碼後:1111,你好‘‘‘一: read(3):檔案開啟檔案為文字模式時,代表讀取3個字元;檔案開啟檔案為b模式時,代表讀取3個位元組 其餘的檔案內游標移動都是以位元組為單位如seek,tell,truncate注意: 1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的 2. truncate是截斷檔案,所以檔案的開啟檔案必須可寫,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,所以truncate要在r+或a或a+等模式下測試效果‘‘‘f = open(‘二進位檔案‘,‘r+‘,encoding="utf-8")‘‘‘二進位檔案內容如下:你好‘‘‘f.readline()print(f.tell()) #tell游標當前所在位置等於8 為什麼是8 因為"你好" 一個中文為3個位元組加上win平台的預設斷行符號為"\r\n" 所以為8f.seek(1) #seek游標跳到第1個位元組位置print(f.tell())f.truncate(3) #從開始算,將檔案安只保留從0-3個位元組的內容#seek 進階模式f.seek(10,0) #0是預設;不寫就是預設0;從檔案開始數10個位置f.seek(10,1) #1相對位置,就是上一次位置,在數10個位置,這個需要b模式開啟檔案,不然報錯f.seek(-10,2) #2倒序,就是倒著讀取,在數-10個位置,這個需要b模式開啟檔案,不然報錯f.close()#顯示win平台的預設斷行符號;newline以最原始的方式顯示分行符號f = open(‘二進位檔案‘,‘r+‘,encoding="utf-8",newline=‘‘)data = f.readlines()print(data) #[‘你好\r\n‘, ‘1111‘] #newline效果就顯示\r\n; 不加newline預設情況下是[‘你好\n‘, ‘1111‘]少一個\r是因為python給你最佳化掉了
python檔案處理