Python 文件操作之讀寫(xiě)錯(cuò)誤


錯(cuò)誤還原

讀錯(cuò)誤

在對(duì)文件進(jìn)行讀操作過(guò)程中,試圖將txt文件中的數(shù)據(jù)按照4個(gè)字節(jié)的大?。?點(diǎn))依次讀出并進(jìn)行數(shù)據(jù)處理 ,可讀到ae99 1a41時(shí),數(shù)據(jù)不再連續(xù),1a無(wú)法讀出,百思不得其解,各種嘗試后仍然一籌莫展,一度懷疑python對(duì)于文件操作存在bug。
代碼如下:

uartfile = open('addata0.txt','r')
data = uartfile.read(4)

寫(xiě)錯(cuò)誤

對(duì)文件寫(xiě)操作時(shí),產(chǎn)生同樣錯(cuò)誤,再遇到0a0d時(shí)無(wú)法連續(xù)寫(xiě)入。


基礎(chǔ)知識(shí)

文件的讀寫(xiě)操作存在兩種模式:文本模式和二進(jìn)制模式。
所有文件在計(jì)算機(jī)的存儲(chǔ)在物理層以二進(jìn)制0或1的編碼呈現(xiàn),所以同一文件的文本模式與二進(jìn)制模式底層二進(jìn)制相同,只是在上層呈現(xiàn)方式上的編碼不同而已。
文本模式是基于字符編碼的文件,常見(jiàn)的編碼有ASCII編碼,UNICODE編碼等。
二進(jìn)制模式是基于值編碼的文件。
文本文件基本上是定長(zhǎng)編碼的(也有非定長(zhǎng)的編碼如UTF-8),每個(gè)字符在具體編碼中是固定的,ASCII碼是8個(gè)比特的編碼,UNICODE一般占16個(gè)比特。而二進(jìn)制文件可看成是變長(zhǎng)編碼的,因?yàn)閿?shù)值的大小和位數(shù)的長(zhǎng)度有關(guān)系。
目前自己接觸的二進(jìn)制模式和文本模式的不同主要有以下幾個(gè):

1、換行符在Windows 文本里是 \r\n (0x0D0A,回車(chē)換行),在 Linux 文本里是 \n(0x0A換行符)。
2、 結(jié)束符(0x1A),在Linux下采用文本模式讀寫(xiě)文本文件不會(huì)存在結(jié)束符現(xiàn)象,但是在Windows下遇到該問(wèn)題。


解決方法

在python的文本操作下存在以下模式:

r :讀文本模式
w :寫(xiě)文本模式
rb :讀二進(jìn)制模式
wb :寫(xiě)二進(jìn)制模式

對(duì)文本文件進(jìn)行文本操作(讀取或?qū)懭胱址?,直接采用r或者w。
對(duì)文本文件進(jìn)行二進(jìn)制操作(讀出或?qū)懭霐?shù)據(jù)),采用rb或者wb。

uartfile = open('addata0.txt','rb')
channl1 = open ('channl1.txt','wb')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容