python基礎-檔案讀寫'r' 和 'rb'區別
一、Python檔案讀寫的幾種模式:
r,rb,w,wb 那麼在讀寫檔案時,有無b標識的的主要區別在哪裡呢?
1、檔案使用方式標識
‘r’:預設值,表示從檔案讀取資料。
‘w’:表示要向檔案寫入資料,並截斷以前的內容
‘a’:表示要向檔案寫入資料,新增到當前內容尾部
‘r+’:表示對檔案進行可讀寫操作(刪除以前的所有資料)
‘r+a’:表示對檔案可進行讀寫操作(新增到當前檔案尾部)
‘b’:表示要讀寫二進位制資料
2、讀檔案 進行讀檔案操作時,直到讀到文件結束符(EOF)才算讀取到檔案最後,Python會認為位元組\x1A(26)轉換成的字元為文件結束符(EOF),
故使用'r'進行讀取二進位制檔案時,可能會出現文件讀取不全的現象。
示例:
二進位制檔案中存在如下從低位向高位排列的資料:7F 32 1A 2F 3D 2C 12 2E 76
如果使用’r’進行讀取,則讀到第三個位元組,即認為檔案結束。
如果使用’rb’按照二進位制位進行讀取的,不會將讀取的位元組轉換成字元,從而避免了上面的錯誤。
解決方案:
二進位制檔案就用二進位制方法讀取’rb’
總結:
使用’r’的時候,如果碰到’0x1A’,就視為檔案結束,就是EOF。使用’rb’則不存在這個問題,
即:如果你用二進位制寫入再用檔案讀出的話,如果其中存在’0x1A’,就只會讀出檔案的一部分,
使用’rb’會一直讀取檔案末尾。
3、寫檔案 對於字串x=’abc\ndef’,我們可用len(x)得到它的長度為7,\n我們稱之為換行符,實際上是0x0A。當我們用’w’即文字方式寫的時候,在windows平臺上會自動將’0x0A’變成兩個字元’0x0D’,’0x0A’,即檔案長度實際上變成8。當用’r’文字方式讀取時,又自動的轉換成原來的換行符。 如果換成’wb’二進位制方式來寫的話,則會保持一個字元不變,讀取的時候也是原樣讀取。 所以如果用文字方式寫入,用二進位制方式讀取的話,就要考慮這多出的一個位元組了。’0x0D’也稱回車符。 Linux下不會變,因為linux只使用’0X0A’來表示換行。
相關文章
- Pandas 基礎 (4) - 讀 / 寫 Excel 和 CSV 檔案Excel
- (Python基礎教程之十二)Python讀寫CSV檔案Python
- R讀寫檔案略記
- 【C++基礎】檔案流讀寫操作C++
- Python基礎 - 檔案和流Python
- 「Python」:檔案讀寫Python
- Python——檔案讀寫Python
- Python 讀寫檔案Python
- Python讀寫檔案Python
- python檔案建立、讀取和寫入Python
- Python之檔案讀取和寫入Python
- python讀寫excel檔案PythonExcel
- python檔案讀寫操作Python
- Python檔案讀寫、StringIO和BytesIOPython
- 『無為則無心』Python基礎 — 41、Python中檔案的讀寫操作(一)Python
- 『無為則無心』Python基礎 — 42、Python中檔案的讀寫操作(二)Python
- 基於Python的介面自動化實戰-基礎篇之讀寫配置檔案Python
- python和r語言的區別PythonR語言
- Python中%r和%s的區別Python
- Python 檔案讀寫(Python IO)Python
- Python中檔案的讀寫、寫讀和追加寫讀三種模式的特點Python模式
- Python中的檔案讀寫Python
- python 檔案讀寫練習Python
- python之 檔案讀與寫Python
- python基礎(8)python中is和==的區別詳解Python
- C語言讀取寫入CSV檔案 [一]基礎篇C語言
- Python基礎知識之檔案的讀取操作Python
- Python之檔案讀寫補充——R+模式下修改中文內容Python模式
- python 基礎之檔案Python
- Python基礎——檔案操作Python
- Python:讀寫檔案(I/O) | 組織檔案Python
- 基於Python的介面自動化-讀寫excel檔案PythonExcel
- Python中tuple和list的區別?Python基礎學習!Python
- python學習之讀寫檔案Python
- Python檔案讀寫--錯誤一Python
- Python之檔案讀寫小練Python
- 詳解python檔案讀寫操作Python
- Python零基礎學習筆記(三十)——讀檔案Python筆記