Nối byte Python

LoạiLỗi. không thể nối str thành byte nguyên nhân gốc rễ của lỗi đang thực hiện thao tác nối trong hai đối tượng không tương thích [str và byte]. Hãy hiểu với ví dụ, Giả sử bạn có một tệp văn bản và bạn muốn nối thêm một chuỗi mới vào đó. Bạn có thể gặp lỗi khi nối thêm chuỗi như cant concat str to bytes. Nếu bạn đang gặp lỗi này thì bài đăng này là dành cho bạn

Trong toàn bộ hướng dẫn này, bạn sẽ học cách giải quyết vấn đề của Typerror này một cách đơn giản

 

LoạiLỗi. không thể nối str thành byte [ Nguyên nhân gốc rễ ] -

Nguyên nhân chính hoặc gốc rễ của lỗi này là do bạn đang nối kiểu chuỗi với kiểu byte. Chủ yếu khi bạn giải mã các chuỗi sang định dạng khác, bạn sẽ gặp lỗi. Chúng ta cần thống nhất loại đối tượng trước thao tác nối

Ví dụ: tôi có một tệp văn bản và muốn nối văn bản mẫu với một văn bản khác. Nếu bạn giải mã chuỗi sang định dạng khác như ASCII thì bạn sẽ gặp lỗi

Trong bài học này, bạn sẽ khám phá các thao tác tuần tự phổ biến mà các đối tượng bytes hỗ trợ. Bạn sẽ xem xét kỹ hơn

  • Toán tử innot in
  • Các toán tử nối [+] và sao chép [
    >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    0]
  • Lập chỉ mục và cắt lát
  • Các chức năng tích hợp sẵn
    >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    1,
    >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    2 và
    >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    3
  • Các phương thức cho đối tượng bytes
  • >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    5 và
    >>> a = b'abcde'
    >>> a
    b'abcde
    >>> b = b'fghij'
    >>> b
    b'fghij'
    
    >>> a + b
    b'abcdefghij'
    
    >>> a * 3
    b'fghijfghijfghij'
    
    6

Để biết thêm thông tin về các giá trị thập lục phân, hãy xem các tài nguyên sau

  • Mã hóa Unicode & ký tự trong Python. Hướng dẫn không đau
  • Mục nhập Wikipedia hệ thập lục phân

Đây là cách sử dụng các toán tử innot in

>>>

>>> a = b'abcde'
>>> a
b'abcde'

>>> b'cd' in a
True
>>> b'spam' in a
False
>>> b'spam' not in a
True

Dưới đây là cách sử dụng toán tử nối [+] và sao chép [

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
0]

>>>

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'

Đây là cách lập chỉ mục và cắt

>>>

>>> a = b'abcde'
>>> a[2]
99
>>> a[1]
98
>>> a[2:4]
b'cd'
>>> a[1:5]
b'bcde'

Dưới đây là cách sử dụng các hàm tích hợp sẵn

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
1,
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
2 và
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
3

>>>

>>> a = b'abcde'
>>> len[a]
5
>>> max[a]
101
>>> chr[101]
'e'
>>> min[a]
97
>>> chr[97]
'a'

Đây là cách sử dụng các phương thức cho đối tượng bytes

>>>

>>> a = b'spam,egg,spam,bacon,spam,lobster'
>>> a
b'spam,egg,spam,bacon,spam,lobster'
>>> a.count[b'spam']
3
>>> a.count['spam']
Traceback [most recent call last]:
  File "", line 1, in 
    a.count['spam']
TypeError: argument should be integer or bytes-like object, not 'str'

>>> a.endswith[b'ster']
True

>>> a.find[b'bacon']
14

>>> a
b'spam,egg,spam,bacon,spam,lobster'
>>> a.split[sep=b',']
[b'spam', b'egg', b'spam', b'bacon' , b'spam', b'lobster']

>>> a.center[40, b'-']
b'----spam,egg,spam,bacon,spam,lobster----'

>>> a.center[40, ' ']
Traceback [most recent call last]:
  File "", line 1, in 
    a.center[40, ' ']
TypeError: center[] argument 2 must be a byte string of length 1, not 'str'

Đây là cách sử dụng

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
5 và
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
6

>>>

>>> a = b'spam,egg,spam,bacon,spam,lobster'
>>> a[1]
112
>>> a[3]
109
>>> hex[a[0]]
'0x73'
>>> a[0]
115
>>> list[a]
[115, 112, 97, 109, 44, 101, 103, 103, 44, 115, 112, 97, 109, 44, 98, 97, 99, 111, 110, 44, 115, 112, 97, 109, 44, 108, 111, 98, 115, 116, 101, 114]

>>> b = bytes.fromhex[' aa 68 32 af ']
>>> b
b'\xaah2\xaf'
>>> list[b]
[170, 104, 50, 175]

>>> b
b'\xaah2\xaf'
>>> b.hex[]
'aa6832af'
>>> type[b.hex[]]

Alain Rouleau trên

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
49 đó khá là đau đầu. Và tại sao đầu ra có cả
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
50 và
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
51 trong
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
52?

Nhưng điều dường như đang xảy ra là hệ thập lục phân 68 bằng số thập phân 104, đến lượt nó là ascii cho

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
50. Cộng với số thập lục phân 32 là số thập phân 50, lần lượt là ascii cho
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
51. Tất cả đều khá điên rồ

Veda trên

Làm thế nào để giao diện điều khiển trên Mã VS trông rất sặc sỡ?

Ricky White Nhóm RP trên

Tôi tin rằng Chris sử dụng BPython làm REPL Python của anh ấy. Đó là những gì bạn đang thấy bên trong VS Code Terminal của anh ấy

Veda trên

Cảm ơn vì đã trả lời. Tôi đã thử cài đặt nó trên windows, nhưng gặp lỗi phụ thuộc khác khi gọi nó. [không tìm thấy mô-đun fcntl ]. Tôi đoán tôi phải gắn bó với REPL mặc định thông thường

Veda trên

Đã sửa xong. Trên cửa sổ, chúng ta cần sử dụng python -m bpython. cli thay vì python để truy cập CLI này

Chris Bailey Nhóm RP trên

Xin chào @Veda, tôi rất vui vì bạn đã tìm ra giải pháp.

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
57 trên windows đôi khi hơi rắc rối. Tôi đã phát hiện ra rằng nó thường là do sự hỗ trợ của một số gói cơ bản [lời nguyền, v.v.]

Trong tương lai, nếu bạn muốn xem xét một số lựa chọn thay thế có thể có, với các tính năng tương tự.

>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
58 và
>>> a = b'abcde'
>>> a
b'abcde
>>> b = b'fghij'
>>> b
b'fghij'

>>> a + b
b'abcdefghij'

>>> a * 3
b'fghijfghijfghij'
59

Bạn có thể nối các byte trong Python không?

Nối nhiều chuỗi byte . 7 và 3. the good old join[] will work in both, Python 2.7 and 3. x. Trong Python 3, tiền tố chuỗi phân cách 'b' là rất quan trọng [nối một chuỗi các chuỗi loại byte với dấu phân cách loại byte].

Chúng ta có thể nối byte và chuỗi không?

Có thể nối các byte thành str không? . It is not possible based on simple code above.

Chủ Đề