錯(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')