Python trừ byte

byte, bytearray Ví dụ Trình bày dữ liệu một cách hiệu quả với các loại byte, bytearray và memoryview

Trang này được xem xét lần cuối vào ngày 29 tháng 10 năm 2022

byte. Đối với các tác vụ cấp thấp trong Python, chúng ta phải truy cập trực tiếp byte. Một byte có thể lưu trữ từ 0 đến 255. Chúng tôi sử dụng byte và bytearray tích hợp sẵn

Theo nhiều cách, các đối tượng byte tương tự như các chuỗi. Nhiều phương pháp tương tự có sẵn. Chúng ta nên biết rằng bytearray có thể thay đổi và "byte" thì không

ví dụ về byte. Để bắt đầu, chúng ta sử dụng một danh sách và một mảng phụ cùng nhau. Chúng ta có thể sử dụng bytearray tích hợp sẵn và truyền cho nó một thể hiện danh sách để tạo một bytearray

Bước 1 Chúng tôi tạo một danh sách gồm 6 số nguyên. Mỗi số trong danh sách nằm trong khoảng từ 0 đến 255 (đã bao gồm)

Bước 2 Ở đây, chúng tôi tạo một mảng phụ từ danh sách—chúng tôi sử dụng hàm tích hợp sẵn trong mảng phụ

Bước 3 Chúng tôi sửa đổi 2 phần tử đầu tiên trong mảng phụ—điều này không thể thực hiện được với đối tượng bytes. Sau đó, chúng tôi lặp lại kết quả

# Bước 1. tạo danh sách các số nguyên. #. Tất cả đều nằm trong khoảng từ 0 đến 255. phần tử = [0, 200, 50, 25, 10, 255] # Bước 2. tạo bytearray từ danh sách. giá trị = bytearray(elements) # Bước 3. sửa đổi các phần tử và lặp qua mảng phụ. giá trị[0] = 5 giá trị[1] = 0 cho giá trị trong giá trị. in("GIÁ TRỊ. ", giá trị) GIÁ TRỊ. 5 GIÁ TRỊ. 0 GIÁ TRỊ. 50 GIÁ TRỊ. 25 GIÁ TRỊ. 10 GIÁ TRỊ. 255

Ví dụ về byte. Bây giờ chúng ta xem xét byte—điều này tương tự như bytearray, nhưng không thể thay đổi các phần tử. Đối tượng bytes là một mảng byte bất biến

Mẹo Bytearray, byte và memoryview hoạt động theo giao thức bộ đệm. Tất cả đều chia sẻ cú pháp tương tự

phần tử = [5, 10, 100] # Tạo đối tượng byte bất biến. dữ liệu = byte (phần tử) # Lặp lại byte. cho mục trong dữ liệu. in("BYTE. ", mục) BYTE. 5 byte. 10 byte. 100

Lỗi. Ở đây chúng tôi thấy một lỗi khi sử dụng byte. Chúng tôi cố gắng sửa đổi phần tử đầu tiên của đối tượng bytes. Python phàn nàn về "đối tượng không hỗ trợ gán mục. "

data = bytes([10, 20, 30, 40]) # Chúng ta có thể đọc giá trị từ đối tượng bytes. print(data[0]) # Chúng ta không thể gán phần tử. data[0] = 110 Traceback (lần gọi gần đây nhất). Tệp "/Users/sam/Documents/test. py", dòng 9, indata[0] = 1 TypeError. đối tượng 'byte' không hỗ trợ gán mục

len. Chúng ta có thể lấy độ dài của một đối tượng bytearray hoặc bytes với len tích hợp sẵn. Ở đây chúng tôi sử dụng bytearray giống như một chuỗi hoặc một danh sách

# Tạo mảng phụ từ một số dữ liệu. giá trị = bytearray([6, 7, 60, 70, 0]) # Nó có 5 phần tử. #. ống kính là 5. print("Số phần tử. ", len(giá trị))Số phần tử. 5

chữ. Các đối tượng byte và bytearray có thể được tạo bằng cú pháp chuỗi ký tự đặc biệt. Chúng tôi đặt trước các chữ cái bằng "b. " Tiền tố này là bắt buộc

Mẹo Các phương thức giao thức bộ đệm yêu cầu các chuỗi ký tự tiền tố byte, ngay cả đối với các đối số cho các phương thức như thay thế ()

# Tạo đối tượng byte từ ký tự byte. data = bytes(b"abc") cho giá trị trong dữ liệu. print(value) print() # Tạo mảng phụ từ ký tự byte. arr = bytearray(b"abc") cho giá trị trong mảng. in(giá trị) 97 98 99 97 98 99

Lát, mảng phụ. Chúng ta có thể cắt các mảng phụ. Và bởi vì mảng phụ có thể thay đổi, chúng ta có thể sử dụng các lát cắt để thay đổi nội dung của nó. Ở đây chúng tôi gán một lát cho một danh sách số nguyên

giá trị = [5, 10, 15, 20] arr = bytearray(values) # Gán 2 phần tử đầu tiên cho danh sách mới. mảng[0. 2] = [100, 0, 0] # Mảng hiện đã được sửa đổi. cho v trong mảng. in(v)100 0 0 15 20

Lát, byte. Một đối tượng bytes cũng hỗ trợ cú pháp lát, nhưng nó chỉ đọc. Ở đây chúng tôi nhận được một lát byte (2 phần tử đầu tiên) và lặp qua nó

Thông thường, chúng ta có thể lặp trực tiếp trên một lát cắt trong điều kiện vòng lặp for. Biến không cần thiết

data = bytes(b"abc") # Lấy một lát cắt từ đối tượng bytes. first_part = dữ liệu [0. 2] # Hiển thị giá trị từ lát cắt. cho phần tử trong first_part. in(phần tử)97 98

Đếm. Nhiều phương thức có sẵn trên giao diện bộ đệm. Đếm là một—nó lặp qua các byte và đếm các phiên bản khớp với mẫu đã chỉ định của chúng tôi

Lưu ý Đếm phải lặp qua tất cả các phần tử. Nếu sau đó cần một vòng lặp khác, chúng ta thường có thể kết hợp các vòng lặp để tăng tốc

Đối số Đối số để đếm() phải là một đối tượng byte, giống như một chuỗi ký tự "b" hoặc một số từ 0 đến 255

# Tạo đối tượng byte và mảng phụ. data = bytes(b"aabbcccc") arr = bytearray(b"aabbcccc") # Phương thức đếm (từ giao diện bộ đệm) hoạt động trên cả hai. in (dữ liệu. đếm (b"c")) in (mảng. đếm(b"c"))4 4

Tìm thấy. Phương thức này trả về chỉ số ngoài cùng bên trái của một chuỗi phù hợp. Theo tùy chọn, chúng tôi có thể chỉ định chỉ mục bắt đầu và chỉ mục kết thúc (làm đối số thứ hai và thứ ba)

data = bytes(b"python") # Chuỗi này được tìm thấy. chỉ mục1 = dữ liệu. find(b"on") print(index1) # Không có trình tự này. chỉ mục2 = dữ liệu. tìm(b"java") in(index2)4 -1

trong toán tử. Điều này kiểm tra sự tồn tại. Chúng tôi sử dụng "in" để xem liệu một phần tử có tồn tại trong các đối tượng byte không. Đây là một cách rõ ràng hơn để xem liệu một byte có tồn tại trong đối tượng của chúng ta hay không

data = bytes([100, 20, 10, 200, 200]) # Kiểm tra đối tượng byte với toán tử "in". nếu 200 trong dữ liệu. print(True) nếu 0 không có trong dữ liệu. in(Sai) Đúng Sai

Kết hợp 2 mảng phụ. Như với danh sách và các chuỗi khác, chúng ta có thể kết hợp 2 mảng phụ (hoặc byte) với dấu cộng. Trong các thử nghiệm của tôi, tôi thấy không có vấn đề gì nếu chúng ta kết hợp 2 loại khác nhau

left = bytearray(b"hello ") right = bytearray(b"world") # Kết hợp 2 đối tượng bytearray với dấu cộng. cả hai = trái + phải in(cả hai)bytearray(b'hello world')

Chuyển đổi danh sách. Một danh sách các byte (số từ 0 đến 256) có thể được chuyển đổi thành một mảng phụ với hàm tạo. Để chuyển đổi lại thành danh sách, vui lòng sử dụng hàm tạo tích hợp trong danh sách

Danh sách mẹo hiển thị theo cách thân thiện hơn với phương pháp in. Vì vậy, chúng tôi có thể sử dụng mã này để hiển thị các mảng và byte

ban đầu = [100, 255, 255, 0] print(ban đầu) # Chuyển danh sách thành mảng byte. b = bytearray(initial) print(b) # Chuyển đổi trở lại danh sách. kết quả = list(b) print(result)[100, 255, 255, 0] bytearray(b'd\xff\xff\x00') [100, 255, 255, 0]

Chuyển đổi chuỗi. Một mảng phụ có thể được tạo từ một chuỗi. Mã hóa (như "ascii") được chỉ định làm đối số thứ hai trong hàm tạo bytearray

Decode Để chuyển đổi từ một bytearray trở lại thành một chuỗi, phương thức giải mã là cần thiết

# Tạo một mảng phụ từ một chuỗi có mã hóa ASCII. are = mảng byte("abc", "ascii") print(array) # Chuyển đổi mảng byte trở lại thành chuỗi. kết quả = mảng. giải mã("ascii") in(kết quả)bytearray(b'abc') abc

Nối, xóa, chèn. Một mảng phụ hỗ trợ nhiều thao tác giống như một danh sách. Chúng ta có thể nối các giá trị. Chúng tôi có thể xóa một giá trị hoặc một phạm vi giá trị với del. Và chúng ta có thể chèn một giá trị

# Tạo mảng phụ và nối các số nguyên dưới dạng byte. giá trị = bytearray() giá trị. nối thêm (0) giá trị. nối thêm (1) giá trị. append(2) print(values) # Xóa phần tử đầu tiên. giá trị del [0. 1] print(values) # Chèn vào chỉ mục 1 giá trị 3. giá trị. chèn(1, 3) in(giá trị)mảng phụ(b'\x00\x01\x02') mảng phụ(b'\x01\x02') mảng phụ(b'\x01\x03\x02')

Giá trịError. Các số được chèn vào đối tượng bytearray hoặc byte phải nằm trong khoảng từ 0 đến 255. Nếu chúng tôi cố gắng chèn một số nằm ngoài phạm vi, chúng tôi sẽ nhận được ValueError

# Điều này không hoạt động. giá trị = bytes([3000, 4000, 5000]) print("Chưa đạt")Traceback (lần gọi gần đây nhất). Tệp "/Users/sam/Documents/test. py", dòng 4, invalues ​​= byte([3000, 4000, 5000]) ValueError. byte phải nằm trong phạm vi (0, 256)

Thay thế. Giao thức bộ đệm hỗ trợ các phương thức giống như chuỗi. Chúng ta có thể sử dụng thay thế () như trên một chuỗi. Các đối số phải là đối tượng byte—ở đây chúng tôi sử dụng chữ "b"

value = b"aaabbb" # Sử dụng phương thức thay thế byte. kết quả = giá trị. thay thế(b"bbb", b"ccc") in(kết quả)b'aaaccc'

Đối chiếu. Chữ "b" là một đối tượng byte. Chúng ta có thể so sánh một đối tượng bytearray hoặc byte với loại hằng số này. Để so sánh các đối tượng byte, chúng ta sử dụng 2 dấu bằng

Lưu ý Hai dấu bằng so sánh nội dung byte riêng lẻ, không phải danh tính của đối tượng

# Tạo đối tượng byte không có từ khóa "byte". value1 = b"desktop" print(value1) # Sử dụng từ khóa byte. value2 = bytes(b"desktop") print(value2) # So sánh các đối tượng 2 byte. nếu giá trị1 == giá trị2. print(True) b'desktop' b'desktop' True

Bắt đầu, kết thúc. Chúng ta có thể xử lý các đối tượng byte giống như chuỗi. Các phương thức phổ biến như startedwith và endwith được bao gồm. Chúng kiểm tra phần đầu và phần cuối

Đối số Đối số để bắt đầu và kết thúc phải là một đối tượng byte. Chúng ta có thể sử dụng tiền tố "b" tiện dụng

value = b"users" # So sánh các byte bắt đầu với và kết thúc. nếu giá trị. startedwith(b"use"). in (True) nếu giá trị. kết thúc bằng(b"s"). in(Đúng) Đúng Đúng

Chia tách. Các phương thức chia và nối được triển khai trên các đối tượng byte. Ở đây chúng tôi xử lý một chuỗi CSV đơn giản theo byte. Chúng tôi phân tách các giá trị dựa trên dấu phẩy

# Một đối tượng byte có các giá trị được phân tách bằng dấu phẩy. data = b"cat,dog,fish,bird,true" # Tách trên dấu phẩy-byte. phần tử = dữ liệu. split(b",") # Độ dài in và liệt kê nội dung. print(len(elements)) print(elements) # Kết hợp các đối tượng byte thành một đối tượng byte đơn. kết quả = b",". tham gia(phần tử) in(kết quả)5 [b'cat', b'dog', b'fish', b'bird', b'true'] b'cat,dog,fish,bird,true'

Chế độ xem bộ nhớ. Đây là một bản tóm tắt cung cấp các phương thức giao diện bộ đệm. Chúng ta có thể tạo một memoryview từ đối tượng bytes, bytearray hoặc một kiểu khác như mảng

Mẹo Với chế độ xem bộ nhớ, chúng tôi có thể tách mã sử dụng giao diện bộ đệm khỏi loại dữ liệu thực tế. Nó là một sự trừu tượng

view = memoryview(b"abc") # In phần tử đầu tiên. print(view[0]) # In số phần tử. print(len(view)) # Chuyển thành danh sách. In xem. tolist())b'a' 3 [97, 98, 99]

Điểm chuẩn, mảng phụ. Giả sử chúng ta muốn nối thêm 256 giá trị vào danh sách. Bytearray phức tạp hơn để xử lý và nó không hỗ trợ các giá trị số lớn. Nhưng nó có thể giúp hiệu suất

Phiên bản 1 Phiên bản mã này nối các số nguyên vào bộ sưu tập danh sách trong một vòng lặp lồng nhau

Phiên bản 2 Trong mã này, chúng tôi nối các số nguyên vào một mảng phụ trong một vòng lặp lồng nhau. Các giá trị tương tự được sử dụng như trong phiên bản 1

Kết quả Bytearray ở đây nhanh hơn. Vì vậy, cả hai chúng tôi đều cải thiện kích thước bộ nhớ và giảm thời gian cần thiết với bytearray over list

nhập thời gian in(thời gian. thời gian()) # Phiên bản 1. thêm vào danh sách. cho tôi trong phạm vi (0, 1000000). x = danh sách () cho v trong phạm vi (0, 255). x. nối thêm (v) in (thời gian. thời gian()) # Phiên bản 2. thêm vào mảng phụ. cho tôi trong phạm vi (0, 1000000). x = bytearray() cho v trong phạm vi (0, 255). x. nối thêm (v) in (thời gian. thời gian())1411859925. 29213 1411859927. nối thêm danh sách 673053. 2. 38 giây 1411859929. 463818 bytearray nối thêm. 1. 79 giây [nhanh hơn]

Đọc byte từ tập tin. Một tập tin có thể được đọc vào một đối tượng bytes. Chúng ta phải chỉ định chế độ "b"—để đọc tệp dưới dạng byte, chúng ta sử dụng đối số "rb. "

Ghi chú, hiệu suất. Danh sách và chuỗi có thể trở nên kém hiệu quả nhanh chóng. Nơi chúng tôi biểu thị dữ liệu theo byte, số từ 0 đến 255, các loại bộ đệm (như byte và bytearray) là lý tưởng

một bản tóm tắt. Byte và bytearrays là một dạng chuỗi hiệu quả, dựa trên byte. Chúng có nhiều phương thức giống như chuỗi, nhưng cũng có thể được sử dụng dưới dạng danh sách

Dot Net Perls là tập hợp các ví dụ về mã đã được thử nghiệm. Các trang được cập nhật liên tục để luôn cập nhật, với ưu tiên hàng đầu là tính chính xác của mã

Sam Allen đam mê ngôn ngữ máy tính. Trước đây, công việc của anh ấy đã được Apple và Microsoft giới thiệu và anh ấy đã học máy tính tại một trường đại học chọn lọc ở Hoa Kỳ

Chúng ta có thể trừ các ký tự trong Python không?

Vì chúng ta có thể sử dụng cú pháp lớp ký tự đầy đủ trong lớp ký tự bị trừ, nên chúng ta có thể trừ một lớp khỏi lớp bị trừ . [0-9-[0-7-[0-3]]] trước tiên trừ 0-3 từ 0-7, thu được [0-9-[4-7]] hoặc [0-38-9], mà .

Hàm trừ trong Python là gì?

Hàm trừ() được dùng khi chúng ta muốn tính hiệu của hai mảng . Nó trả về sự khác biệt của mảng1 và mảng2, phần tử khôn ngoan. Thông số. mảng1. [array_like hoặc scalar]Mảng đầu vào đầu tiên.