日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 学习笔记(3)对txt文件的读与写操作(下)

發布時間:2025/4/5 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 学习笔记(3)对txt文件的读与写操作(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?? ? ? ?上一章節我們討論了如何對txt文本文件進行讀寫操作,這一張將討論如何進行二進制文件的寫與讀。《Python 學習筆記(3)對txt文件的讀與寫操作(上)》的鏈接如下https://blog.csdn.net/yanchuan23/article/details/121069465https://blog.csdn.net/yanchuan23/article/details/121069465https://blog.csdn.net/yanchuan23/article/details/121069465?????

1、uint32數據轉換為4個字節

? ? ? ? 首先看下如何將uint32轉換為4個字節。

# 計算一個無符號32位數據的bytes表達 temp = [0] * 4 uintdata = 123456 for i in range(4):temp[i] = hex((uintdata >> i * 8) & 0xff)

????????計算結果如下:

????????但是如果數據位浮點數這樣就行不通了。

????????可以用struct來解決bytes和其他二進制數據類型的轉換。

2、 struct模塊

????????struct的作用:將字節串解讀為打包的二進制數據。

????????該模塊執行Python值和以Python字節對象表示的C結構體之間的轉換。 這可以用于處理存儲在文件中的二進制數據或來自其他來源的網絡連接的二進制數據。 它使用格式字符串作為C結構布局的緊湊描述,以及與Python值的轉換。

2.1、struct模塊中的功能

函數

return

explain

pack(fmt,v1,v2…)

string

按照給定的格式(fmt),把數據轉換成字符串(字節流),并將該字符串返回.

pack_into(fmt,buffer,offset,v1,v2…)

None

按照給定的格式(fmt),將數據轉換成字符串(字節流),并將字節流寫入以offset開始的buffer中.(buffer為可寫的緩沖區,可用array模塊)

unpack(fmt,v1,v2…..)

tuple

按照給定的格式(fmt)解析字節流,并返回解析結果

pack_from(fmt,buffer,offset)

tuple

按照給定的格式(fmt)解析以offset開始的緩沖區,并返回解析結果

calcsize(fmt)

size of fmt

計算給定的格式(fmt)占用多少字節的內存,注意對齊方式

2.2、格式化字符串

????????當打包或者解包的時,需要按照特定的方式來打包或者解包。該方式就是格式化字符串,它指定了數據類型,除此之外,還有用于控制字節順序、大小和對齊方式的特殊字符。

2.2.1、字節順序、大小與對齊方式

????????為了同c中的結構體交換數據,還要考慮c或c++編譯器使用了字節對齊,通常是以4個字節為單位,故而struct根據本地機器字節順序轉換。可以用格式中的第一個字符來改變對齊方式。定義如下

Character

Byte order (字節順序大小)

Size

Alignment(對齊)

@(默認)

本機(native)

本機(native)

本機(native),湊夠4個字節

=

本機(native)

標準(standard)

None,按原字節數

<

小端(little-endian)

標準(standard)

None,按原字節數

>

大端(big-endian)

標準(standard)

None,按原字節數

!

network(= big-endian大端)

標準(standard)

None,按原字節數

2.2.2、格式符

Format格式符

C TypeC語言類型)

Python typePython語言類型)

Standard size

x

pad byte(填充字節)

no value

c

Char

bytes of length 1

1

b

signed char

integer

1

B

unsigned char

integer

1

?

_Bool

bool

1

h

Short

integer

2

H

unsigned short

integer

2

i

int

integer

4

I(大寫的i

unsigned int

integer

4

l(小寫的L

long

integer

4

L

unsigned long

integer

4

q

long long

integer

8

Q

unsigned long long

integer

8

n

ssize_t

integer

N

size_t

integer

e

(6)

float

2

f

float

float

4

d

double

float

8

s

char[]

bytes

p

char[]

bytes

P

void*

integer

2.3、例子

# 將浮點數變為字符串f_data1 = 123.4567f_data1 = struct.pack('<f', f_data1)u_data1 = struct.unpack('<I', f_data1)f_data2 = -123.4567f_data2 = struct.pack('<f', f_data2)u_data2 = struct.unpack('<I', f_data1)

?3、二進制文件讀寫

?3.1、二進制文件寫

?????????好了,這下我們學會了如何將浮點數或者整形數據轉換為bytes了,我們現在就看如何將浮點數或者整型數據存到二進制文本中。廢話不多說,上代碼:

"""二進制文件中的浮點數存儲 """FileName = 'w2.txt'# 以二進制的形式打開一個指定文件夾,如果沒有就創建,如果有就將原來的內容覆蓋fid = open(Folder + '/' + FileName, 'wb')s2 = 123.4567s3 = -123.4567# 使用pack函數,將f數據 以小子端的方式轉換為bytesDataBytes = struct.pack('<f', s2)for i in range(4):fid.write(c_uint8(DataBytes[i])) # 在write的時候還是轉換和成c_uint8,不然會報錯DataBytes = struct.pack('<f', s3)for i in range(4):fid.write(c_uint8(DataBytes[i]))fid.close()

????????最后生成了txt文件,如下所示,將顯示改成hex的方式。

3.2、二進制文件讀取? ? ? ??

????????這個時候我們并不能認為結果是對的,我們可以用matlab讀取驗證或者用Python自己讀取再將bytes數據轉換為float。

?3.2.1、Matlab讀取二進制文件

????????Matlab的代碼如下所示:

close all clear clcfid = fopen('w2.txt','r'); data1 = fread(fid,1,'float'); data2 = fread(fid,1,'float');

????????我們以float的方式讀取,發現讀取的結果為123.4567和-123.4567,和我們一開始的賦值一致,證明那個我們這么寫是成功了的。

3.2.2、Python讀取二進制文件? ? ?

FileName = 'w2.txt'# 以二進制的形式打開一個指定文件夾,如果沒有就創建,如果有就將原來的內容覆蓋fid = open(Folder + '/' + FileName, 'rb')DataBytes1 = fid.read(4) # 這邊讀出來是 bytes# 將bytes解包為指定的數據類型S4 = struct.unpack('<f', DataBytes1)DataBytes1 = fid.read(4) # 這邊讀出來是 bytes# 將bytes解包為指定的數據類型S5 = struct.unpack('<f', DataBytes1)fid.close()

? ??

4、寫在最后

????????好了,關于Python如何讀寫 文本文件、二進制文件、將字符串寫到txt文件中與將float或者int數據寫到txt文件的方法大概就寫到這,后面如果還遇到啥就繼續補充吧。

文中對應的代碼鏈接:

Project_File.rar-嵌入式文檔類資源-CSDN文庫https://download.csdn.net/download/yanchuan23/36135222

總結

以上是生活随笔為你收集整理的Python 学习笔记(3)对txt文件的读与写操作(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。