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 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 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: - 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. - 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. - 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ên | Sự mô tả |
---|
cũ | Bộ con mà chúng tôi muốn thay thế trong chuỗi | Mới | Sự 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 | đếm | Chỉ 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. |