Hướng dẫn how to remove bytes in python - cách xóa byte trong python

Tôi khá mới đối với Python và đôi khi những thứ có vẻ khá dễ trở nên phức tạp hơn mong đợi

Tôi hiện đang sử dụng bộ đệm byte để đọc từ ổ cắm:

data = self.socket.recv (kích thước)

và sau đó xử lý một phần của bộ đệm đó và cần loại bỏ nó

Vấn đề là tôi đã tìm cách làm điều đó và không tìm thấy manh mối trong cả buổi tối, tôi khá chắc chắn rằng tôi không nhận được bất kỳ kết quả công bằng nào vì những từ liên quan, hoặc có thể không thể

Tôi đã thử với "Del" nhưng có một lỗi khi nói rằng nó không được hỗ trợ

Tôi đang làm sai cách? Có lẽ ai đó có thể dẫn tôi đúng cách? :)

Đã hỏi ngày 1 tháng 9 năm 2013 lúc 21:14Sep 1, 2013 at 21:14

Hướng dẫn how to remove bytes in python - cách xóa byte trong python

bytes không hỗ trợ xóa mục vì nó bất biến. Để "sửa đổi" các chuỗi và các đối tượng giống như chuỗi, bạn cần lấy một bản sao, để xóa olddata[start:end] làm:

newdata = olddata[:start] + olddata[end:]

Tất nhiên đó là một số lượng hợp lý của việc sao chép, không phải tất cả đều cần thiết, vì vậy bạn có thể thích làm lại mã của mình một chút cho hiệu suất. Bạn có thể sử dụng bytearray (có thể thay đổi). Hoặc có lẽ bạn có thể tìm cách hoạt động thông qua bộ đệm (sử dụng chỉ mục hoặc lặp lại các yếu tố của nó), thay vì cần rút ngắn nó sau mỗi bước.

Đã trả lời ngày 1 tháng 9 năm 2013 lúc 21:20Sep 1, 2013 at 21:20

Steve Jessopsteve JessopSteve Jessop

269K38 Huy hiệu vàng453 Huy hiệu bạc694 Huy hiệu Đồng38 gold badges453 silver badges694 bronze badges

0

Tôi nghĩ rằng tôi đã tìm thấy cách thích hợp, chỉ nhìn từ một góc độ khác:

self.data = self.data [index:]

chỉ sao chép những gì tôi cần một lần nữa

Đã trả lời ngày 1 tháng 9 năm 2013 lúc 21:19Sep 1, 2013 at 21:19

JadejadeJade

3011 Huy hiệu vàng4 Huy hiệu bạc11 huy hiệu đồng1 gold badge4 silver badges11 bronze badges

Python's ________ 9is thường là một sự thay thế khả thi để cắt, và đôi khi thích hợp hơn. Mặc dù điều đó không rõ ràng trong trường hợp này, nhưng đây là cách nó có thể được áp dụng cho vấn đề của bạn:

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'

Đã trả lời ngày 2 tháng 9 năm 2013 lúc 1:05Sep 2, 2013 at 1:05

Hướng dẫn how to remove bytes in python - cách xóa byte trong python

Martineaumartineaumartineau

Huy hiệu vàng 116K2525 gold badges161 silver badges288 bronze badges

Dải khoảng trắng từ byte trong python #

Để tước khoảng trắng từ đối tượng byte:

  1. Sử dụng phương thức
    import struct
    
    def remove_bytes(buffer, start, end):
        fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
        return b''.join(struct.unpack(fmt, buffer))
    
    data = b'abcdefghijk'
    print( remove_bytes(data, 2, 4) )  # b'abefghijk'
    
    0 để chuyển đổi đối tượng byte thành chuỗi.
  2. Sử dụng phương pháp
    import struct
    
    def remove_bytes(buffer, start, end):
        fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
        return b''.join(struct.unpack(fmt, buffer))
    
    data = b'abcdefghijk'
    print( remove_bytes(data, 2, 4) )  # b'abefghijk'
    
    1 để loại bỏ tất cả khoảng trắng dẫn đầu và dấu vết từ chuỗi.
  3. Sử dụng phương thức
    import struct
    
    def remove_bytes(buffer, start, end):
        fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
        return b''.join(struct.unpack(fmt, buffer))
    
    data = b'abcdefghijk'
    print( remove_bytes(data, 2, 4) )  # b'abefghijk'
    
    2 để chuyển đổi chuỗi thành đối tượng byte.

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' # ✅ Strip leading and trailing whitespace result = my_str.strip() print(repr(result)) # 👉️ 'hello world' # ✅ Or remove all whitespace result = my_str.replace(' ', '') print(repr(result)) # 👉️ 'helloworld' # ✅ Convert string back to bytes object if necessary my_bytes = result.encode('utf-8') print(my_bytes) # 👉️ b'helloworld'

Bước đầu tiên là sử dụng phương thức

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
0 để chuyển đổi đối tượng byte thành chuỗi.

Phương thức byte.decode trả về một chuỗi được giải mã từ các byte đã cho. Mã hóa mặc định là

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
4.

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' result = my_str.strip() print(repr(result)) # 👉️ 'hello world'

Chúng ta có thể sử dụng phương pháp

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
1 để loại bỏ tất cả khoảng trắng dẫn đầu và dấu vết từ chuỗi.

Phương thức str.strip trả về một bản sao của chuỗi với khoảng trắng dẫn đầu và dấu vết đã bị loại bỏ.

Phương thức không thay đổi chuỗi gốc, nó trả về một chuỗi mới. Chuỗi là bất biến trong Python.

Nếu bạn cần xóa tất cả các khoảng trống khỏi chuỗi, hãy sử dụng phương thức

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
6 thay thế.

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' result = my_str.replace(' ', '') print(repr(result)) # 👉️ 'helloworld'

Phương thức Str.Replace trả về một bản sao của chuỗi với tất cả các lần xuất hiện của một chuỗi con được thay thế bằng cách thay thế được cung cấp.

Phương thức lấy các tham số sau:

TênSự mô tả
Bộ con mà chúng tôi muốn thay thế trong chuỗi
MớiSự thay thế cho mỗi lần xuất hiện
import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
7
đếmChỉ những lần xuất hiện
import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
8 đầu tiên được thay thế (tùy chọn)

Chúng tôi loại bỏ tất cả các khoảng trống khỏi chuỗi bằng cách thay thế mỗi không gian bằng một chuỗi trống.

Nếu bạn cần chuyển đổi chuỗi trở lại đối tượng byte, hãy sử dụng phương thức

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
2.

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' result = my_str.replace(' ', '') print(repr(result)) # 👉️ 'helloworld' my_bytes = result.encode('utf-8') print(my_bytes) # 👉️ b'helloworld'

Phương thức str.encode trả về một phiên bản được mã hóa của chuỗi dưới dạng đối tượng byte. Mã hóa mặc định là

import struct

def remove_bytes(buffer, start, end):
    fmt = '%ds %dx %ds' % (start, end-start, len(buffer)-end)  # 3 way split
    return b''.join(struct.unpack(fmt, buffer))

data = b'abcdefghijk'
print( remove_bytes(data, 2, 4) )  # b'abefghijk'
4.

Mã hóa là quá trình chuyển đổi

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' # ✅ Strip leading and trailing whitespace result = my_str.strip() print(repr(result)) # 👉️ 'hello world' # ✅ Or remove all whitespace result = my_str.replace(' ', '') print(repr(result)) # 👉️ 'helloworld' # ✅ Convert string back to bytes object if necessary my_bytes = result.encode('utf-8') print(my_bytes) # 👉️ b'helloworld'
1 thành đối tượng bytes và giải mã là quá trình chuyển đổi đối tượng bytes thành

Copied!

my_str = ' hello world ' print(type(my_str)) # 👉️ <class 'str'> my_bytes = my_str.encode('utf-8') my_str = my_bytes.decode('utf-8') print(repr(my_str)) # 👉️ ' hello world ' # ✅ Strip leading and trailing whitespace result = my_str.strip() print(repr(result)) # 👉️ 'hello world' # ✅ Or remove all whitespace result = my_str.replace(' ', '') print(repr(result)) # 👉️ 'helloworld' # ✅ Convert string back to bytes object if necessary my_bytes = result.encode('utf-8') print(my_bytes) # 👉️ b'helloworld'
1.