Nội dung chính ShowShow
- Chức năng cấu trúc
- 1. struct.pack[]
- 2. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]2
- 3. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]4
- Chức năng và ngoại lệ
- Định dạng chuỗi
- Thứ tự byte, kích thước và căn chỉnh
- Để căn chỉnh phần cuối của cấu trúc với yêu cầu căn chỉnh của một loại cụ thể, hãy kết thúc định dạng bằng mã cho loại đó với số lượng lặp lại bằng không. Xem ví dụ.
- Các lớp học¶
- Tại sao cấu trúc được sử dụng trong Python?
- Điều gì tương tự như cấu trúc trong Python?
- Có phải cấu trúc có sẵn trong Python không?
- Cấu trúc giải nén là gì?
Mô -đun
1 trong Python được sử dụng để chuyển đổi các loại dữ liệu python tự nhiên như chuỗi và số thành một chuỗi byte và ngược lại. Điều này có nghĩa là người dùng có thể phân tích các tệp dữ liệu nhị phân được lưu trữ trong các cấu trúc C trong Python.import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Nó được sử dụng chủ yếu để xử lý dữ liệu nhị phân được lưu trữ trong các tệp hoặc từ các kết nối mạng, trong số các nguồn khác.
Mô -đun chỉ có sẵn trong Python 3.x và cần được nhập trước bằng cách viết
import struct
Quá trình này cần phải được thực hiện khi bắt đầu chương trình.
Chức năng cấu trúc
1. struct.pack[]
1. struct.pack[]
2. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]2
3. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]4
import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Chức năng và ngoại lệ
Định dạng chuỗi
2. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]2
3. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]4
Chức năng và ngoại lệĐịnh dạng chuỗi
3. import structpacked = struct.pack['i 4s f', 10, b'John', 2500]print[packed]4
Chức năng và ngoại lệ
import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Định dạng chuỗi
Thứ tự byte, kích thước và căn chỉnh Lib/struct.py
Để căn chỉnh phần cuối của cấu trúc với yêu cầu căn chỉnh của một loại cụ thể, hãy kết thúc định dạng bằng mã cho loại đó với số lượng lặp lại bằng không. Xem ví dụ.
Các lớp học¶Format Strings as compact descriptions of the layout of the C structs and the intended conversion to/from Python values.Tại sao cấu trúc được sử dụng trong Python?
Điều gì tương tự như cấu trúc trong Python?
Có phải cấu trúc có sẵn trong Python không?Byte Order, Size, and Alignment for details.Cấu trúc giải nén là gì?
Mô -đun1 trong Python được sử dụng để chuyển đổi các loại dữ liệu python tự nhiên như chuỗi và số thành một chuỗi byte và ngược lại. Điều này có nghĩa là người dùng có thể phân tích các tệp dữ liệu nhị phân được lưu trữ trong các cấu trúc C trong Python.Buffer Protocol and provide either a readable or read-writable buffer. The most common types used for that purpose areimport struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
5 andimport struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
1, but many other types that can be viewed as an array of bytes implement the buffer protocol, so that they can be read/filled without additional copying from aimport struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
5 object.import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Chức năng và ngoại lệ
Định dạng chuỗi
ngoại lệstruct.error¶struct.error¶Ngoại lệ được nâng lên trong các dịp khác nhau; Đối số là một chuỗi mô tả những gì sai.
struct.pack [định dạng, v1, v2, ...] ¶pack[format, v1, v2, ...]¶pack[format, v1, v2, ...]¶Trả về một đối tượng byte chứa các giá trị v1, v2, được đóng gói theo định dạng chuỗi định dạng. Các đối số phải khớp với các giá trị theo yêu cầu của định dạng chính xác.
struct.pack_into [định dạng, bộ đệm, offset, v1, v2, ...] ¶pack_into[format, buffer, offset, v1, v2, ...]¶pack_into[format, buffer, offset, v1, v2, ...]¶Đóng gói các giá trị v1, v2, theo định dạng chuỗi định dạng và ghi các byte được đóng gói vào bộ đệm bộ đệm có thể ghi bắt đầu ở độ lệch vị trí. Lưu ý rằng bù là một đối số bắt buộc.
struct.unpack [định dạng, bộ đệm] ¶unpack[format, buffer]¶unpack[format, buffer]¶Giải nén từ bộ đệm bộ đệm [có lẽ được đóng gói bởi
3] theo định dạng chuỗi định dạng. Kết quả là một tuple ngay cả khi nó chứa chính xác một mục. Kích thước bộ đệm trong byte phải khớp với kích thước theo yêu cầu của định dạng, như được phản ánh bởiimport struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
4. struct.unpack_from [định dạng, /, bộ đệm, offset = 0] ¶unpack_from[format, /, buffer, offset=0]¶struct.unpack_from [định dạng, /, bộ đệm, offset = 0] ¶unpack_from[format, /, buffer, offset=0]¶import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Giải nén từ bộ đệm bắt đầu ở vị trí bù, theo định dạng chuỗi định dạng. Kết quả là một tuple ngay cả khi nó chứa chính xác một mục. Kích thước bộ đệm trong byte, bắt đầu ở độ lệch vị trí, phải ít nhất là kích thước theo yêu cầu của định dạng, như được phản ánh bởi
4. struct.iter_unpack [định dạng, bộ đệm] ¶iter_unpack[format, buffer]¶struct.iter_unpack [định dạng, bộ đệm] ¶iter_unpack[format, buffer]¶import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Lặp đi lặp lại từ bộ đệm bộ đệm theo định dạng chuỗi định dạng. Hàm này trả về một trình lặp sẽ đọc các khối có kích thước như nhau từ bộ đệm cho đến khi tất cả các nội dung của nó đã được tiêu thụ. Kích thước bộ đệm trong byte phải là bội số có kích thước theo định dạng, như được phản ánh bởi
4.import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Mỗi lần lặp lại mang lại một tuple như được chỉ định bởi chuỗi định dạng.
Mới trong phiên bản 3.4.
struct.calcsize [định dạng] ¶calcsize[format]¶calcsize[format]¶Trả về kích thước của cấu trúc [và do đó của đối tượng byte được tạo bởi
3] tương ứng với định dạng chuỗi định dạng.import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Định dạng chuỗi
Chuỗi định dạng là cơ chế được sử dụng để chỉ định bố cục dự kiến khi đóng gói và giải nén dữ liệu. Chúng được xây dựng từ các ký tự định dạng, chỉ định loại dữ liệu được đóng gói/giải nén. Ngoài ra, có các ký tự đặc biệt để kiểm soát thứ tự byte, kích thước và căn chỉnh.Format Characters, which specify the type of data being packed/unpacked. In addition, there are special characters for controlling the Byte Order, Size, and Alignment.Format Characters, which specify the type of data being packed/unpacked. In addition, there are special characters for controlling the Byte Order, Size, and Alignment.
Thứ tự byte, kích thước và căn chỉnh
Theo mặc định, các loại C được biểu diễn theo định dạng gốc của máy và thứ tự byte và được căn chỉnh đúng cách bằng cách bỏ qua byte byte nếu cần thiết [theo các quy tắc được sử dụng bởi trình biên dịch C].
Ngoài ra, ký tự đầu tiên của chuỗi định dạng có thể được sử dụng để chỉ ra thứ tự byte, kích thước và sự liên kết của dữ liệu được đóng gói, theo bảng sau:
8 | native | native | native |
9 | native | Tiêu chuẩn | không ai |
0 | little-endian | Tiêu chuẩn | không ai |
0 | big-endian | Tiêu chuẩn | không ai |
0 | 1 | Tiêu chuẩn | không ai |
1import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
2 Mạng [= Big-Endian]import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Nếu nhân vật đầu tiên không phải là một trong số đó,
3 được giả định.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Thứ tự byte bản địa là lớn hoặc ít endian, tùy thuộc vào hệ thống máy chủ. Ví dụ, Intel X86 và AMD64 [x86-64] là ít endian; IBM Z và hầu hết các kiến trúc di sản là lớn; và ARM, RISC-V và IBM có tính năng chuyển mạch có thể chuyển đổi [Bi-endian, mặc dù hai người trước đây gần như luôn luôn là người thừa kế trong thực tế]. Sử dụng Format Characters section.
4 để kiểm tra tính endian của hệ thống của bạn.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Kích thước và căn chỉnh gốc được xác định bằng cách sử dụng biểu thức trình biên dịch C ____ ____35. Điều này luôn được kết hợp với thứ tự byte gốc.Format Characters section.
Kích thước tiêu chuẩn chỉ phụ thuộc vào ký tự định dạng; Xem bảng trong phần Định dạng ký tự.Lưu ý sự khác biệt giữa
3 vàimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
7: Cả hai đều sử dụng thứ tự byte gốc, nhưng kích thước và sự liên kết của cái sau được tiêu chuẩn hóa.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Notes:
Mẫu
8 đại diện cho thứ tự byte mạng luôn luôn lớn như được định nghĩa trong IETF RFC 1700.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Không có cách nào để chỉ ra thứ tự byte không bản địa [hoán đổi byte]; Sử dụng lựa chọn thích hợp của
9 hoặcimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
20.Examples.import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Đadding chỉ tự động được thêm vào giữa các thành viên cấu trúc liên tiếp. Không có đệm được thêm vào ở đầu hoặc cuối của cấu trúc được mã hóa.
Định dạng ký tự lor
25 | Byte pad | Không có giá trị | ||
26 | char | byte có độ dài 1 | 1 | |
27 | ĐĂNG KÝcharchar | Số nguyên | 1 | [1], [2] |
28 | không dấucharchar | Số nguyên | 1 | [2] |
[1], [2] | _Bool | [1], [2] | 1 | [1] |
28 | short | Số nguyên | 2 | [2] |
[1], [2] | import struct packed = b'\n\x00\x00\x00John\[email protected]\x1cE' unpacked = struct.unpack['i 4s f', packed] print[unpacked] | Số nguyên | 2 | [2] |
[1], [2] | int | Số nguyên | 4 | [2] |
[1], [2] | import struct packed = b'\n\x00\x00\x00John\[email protected]\x1cE' unpacked = struct.unpack['i 4s f', packed] print[unpacked] | Số nguyên | 4 | [2] |
[1], [2] | long | Số nguyên | 4 | [2] |
[1], [2] | import struct packed = b'\n\x00\x00\x00John\[email protected]\x1cE' unpacked = struct.unpack['i 4s f', packed] print[unpacked] | Số nguyên | 4 | [2] |
[1], [2] | import struct packed = b'\n\x00\x00\x00John\[email protected]\x1cE' unpacked = struct.unpack['i 4s f', packed] print[unpacked] | Số nguyên | 8 | [2] |
[1], [2] | import struct packed = b'\n\x00\x00\x00John\[email protected]\x1cE' unpacked = struct.unpack['i 4s f', packed] print[unpacked] 28 longlong | Số nguyên | 8 | [2] |
[1], [2] | ssize_t | Số nguyên | [3] | |
[1], [2] | size_t | Số nguyên | [3] | |
[1], [2] | [6] | float | 2 | [4] |
28 | float | float | 4 | [4] |
không dấuchar | double | float | 8 | [4] |
29 | char[][][] | [1], [2] | ||
28 | char[][][] | [1], [2] | ||
28 | void*** | Số nguyên | [5] |
[1], [2]Added support for the
28import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
không dấucharAdded support for the
29import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
Notes:
80 _Bool type defined by C99. If this type is not available, it is simulated using a char. In standard mode, it is always represented by one byte.import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
81import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
[1], [2]shortAdded use of the
82import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
83import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
[1], [2]int
84import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
85import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
[1], [2]long
86import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
87import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
88.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
[1], [2]longlong
88import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
89import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
80import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
import struct size = struct.calcsize['i 4s f'] print["Size in bytes: {}".format[size]]
81
82import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
83import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
[1], [2]longlong
88import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
89import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
80import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
81
import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Ghi chú
82import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
83import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
2import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
84import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
8import struct
packed = b'\n\x00\x00\x00John\[email protected]\x1cE'
unpacked = struct.unpack['i 4s f', packed]
print[unpacked]
85 [1], [2]Added support for theimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
86 andimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
87 formats.không dấuAdded support for theimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
88 format.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
bool_Bool type defined by C99. If this type is not available, it is simulated using a char. In standard mode, it is always represented by one byte.
Undignedshortkhông dấuAdded use of the
70 method for non-integers.import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
UnsignedLong
dài dài
UNSIGNEDLongLong
Byteclassstruct.struct [định dạng] ¶struct.Struct[format]¶Đã thay đổi trong phiên bản 3.3: Đã thêm hỗ trợ cho các định dạng
86 vàimport struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
87.import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
Ghi chú
82import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
83import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
84 [v1, v2, ...]¶import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
85 [1], [2]Added support for the [buffer, offset, v1, v2, ...]¶import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
88 format. bool_Bool type defined by C99. If this type is not available, it is simulated using a char. In standard mode, it is always represented by one byte.[buffer]¶import struct
size = struct.calcsize['i 4s f']
print["Size in bytes: {}".format[size]]
UNSIGNEDLongLong
ByteLưu trữ nhị phân đóng gói của dữ liệu đồng nhất.[buffer, offset=0]¶Mô -đun
22 Đóng gói và giải nén dữ liệu XDR.[buffer]¶Đóng gói và giải nén dữ liệu XDR.[buffer]¶import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Các lớp học¶
Mô -đun
8 cũng xác định loại sau: classstruct.struct [định dạng] ¶¶¶import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Trả về một đối tượng cấu trúc mới ghi và đọc dữ liệu nhị phân theo định dạng chuỗi định dạng. Tạo một đối tượng struct một lần và gọi các phương thức của nó hiệu quả hơn so với việc gọi các hàm
8 có cùng định dạng vì chuỗi định dạng chỉ cần được biên dịch một lần.import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Các phiên bản được biên dịch của các chuỗi định dạng gần đây nhất được chuyển đến
9 và các hàm cấp mô-đun được lưu trữ, vì vậy các chương trình chỉ sử dụng một vài chuỗi định dạng cần phải lo lắng về việc sử dụng lại một trường hợpimport struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
9.The format string type is nowimport struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
37 instead ofimport struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
5. Các đối tượng cấu trúc được biên dịch hỗ trợ các phương thức và thuộc tính sau:¶Các đối tượng cấu trúc được biên dịch hỗ trợ các phương thức và thuộc tính sau:¶import struct
packed = struct.pack['i 4s f', 10, b'John', 2500]
print[packed]
Gói [V1, V2, ...]
Tại sao cấu trúc được sử dụng trong Python?
Cấu trúc mô -đun được sử dụng để chuyển đổi các loại dữ liệu gốc của python thành chuỗi byte và ngược lại.Chúng tôi không phải cài đặt nó.Đây là một mô-đun tích hợp có sẵn trong Python3.Mô -đun cấu trúc có liên quan đến các ngôn ngữ C.to convert the native data types of Python into string of bytes and vice versa. We don't have to install it. It's a built-in module available in Python3. The struct module is related to the C languages.to convert the native data types of Python into string of bytes and vice versa. We don't have to install it. It's a built-in module available in Python3. The struct module is related to the C languages.
Điều gì tương tự như cấu trúc trong Python?
Bạn có thể sử dụng một tuple cho rất nhiều thứ mà bạn sẽ sử dụng một cấu trúc trong C [ví dụ như tọa độ x, y hoặc màu RGB].Tôi nghĩ rằng cuộc thảo luận "dứt khoát" là ở đây, trong phiên bản được xuất bản của cuốn sách nấu ăn Python.DF.DF.a tuple for a lot of things where you would use a struct in C [something like x,y coordinates or RGB colors for example]. I think the "definitive" discussion is here, in the published version of the Python Cookbook. dF. dF.a tuple for a lot of things where you would use a struct in C [something like x,y coordinates or RGB colors for example]. I think the "definitive" discussion is here, in the published version of the Python Cookbook. dF. dF.
Có phải cấu trúc có sẵn trong Python không?
Mô -đun này thực hiện chuyển đổi giữa các giá trị python và các cấu trúc C được biểu thị dưới dạng các đối tượng byte python.Chuỗi định dạng là cơ chế được sử dụng để chỉ định bố cục dự kiến khi đóng gói và giải nén dữ liệu.Module Struct có sẵn trong Python 3.Module struct is available in Python 3.Module struct is available in Python 3.
Cấu trúc giải nén là gì?
Giải nén [] Hàm này giải nén giá trị được đóng gói vào biểu diễn ban đầu của nó với định dạng được chỉ định.Hàm này luôn trả về một tuple, ngay cả khi chỉ có một yếu tố.unpacks the packed value into its original representation with the specified format. This function always returns a tuple, even if there is only one element.unpacks the packed value into its original representation with the specified format. This function always returns a tuple, even if there is only one element.