Làm cách nào để chuyển đổi byte thành tệp Python?

Trong bài viết này, chúng ta sẽ xem cách chuyển đổi Byte thành Chuỗi trong Python. Đến cuối bài viết này, bạn sẽ có một ý tưởng rõ ràng về những loại này là gì và cách xử lý dữ liệu hiệu quả bằng cách sử dụng chúng

Tùy thuộc vào phiên bản Python bạn đang sử dụng, tác vụ này sẽ khác nhau. Mặc dù Python 2 đã hết tuổi thọ nhưng nhiều dự án vẫn sử dụng nó, vì vậy chúng tôi sẽ đưa vào cả hai cách tiếp cận Python 2 và Python 3

Chuyển đổi byte thành chuỗi trong Python 3

Kể từ Python 3, cách làm việc cũ của ASCII phải thay đổi và Python trở thành Unicode hoàn toàn

Điều này có nghĩa là chúng tôi đã mất loại unicode rõ ràng. u"string" - mỗi chuỗi là một u"string"

Để phân biệt các chuỗi này với các chuỗi phụ cũ tốt, chúng tôi đã giới thiệu một công cụ xác định mới cho chúng -

>>> codecs.decode(b)
"Let's grab a 🍕!"
1

Điều này đã được thêm vào trong Python 2. 6, nhưng nó không phục vụ mục đích thực sự nào ngoài việc chuẩn bị cho Python 3 vì tất cả các chuỗi đều là chuỗi phụ trong 2. 6

Chuỗi byte trong Python 3 được gọi chính thức là

>>> codecs.decode(b)
"Let's grab a 🍕!"
2, một chuỗi số nguyên bất biến trong phạm vi 0 <= x < 256. Một đối tượng giống như
>>> codecs.decode(b)
"Let's grab a 🍕!"
2 khác được thêm vào trong 2. 6 là
>>> codecs.decode(b)
"Let's grab a 🍕!"
4 - tương tự như
>>> codecs.decode(b)
"Let's grab a 🍕!"
2, nhưng có thể thay đổi

Chuyển đổi byte thành chuỗi bằng giải mã ()

Hãy xem cách chúng ta có thể chuyển đổi byte thành Chuỗi, sử dụng phương thức

>>> codecs.decode(b)
"Let's grab a 🍕!"
6 tích hợp cho lớp
>>> codecs.decode(b)
"Let's grab a 🍕!"
2

Chuyển định dạng mã hóa, chúng tôi đã giải mã đối tượng

>>> codecs.decode(b)
"Let's grab a 🍕!"
2 thành một chuỗi và in nó

Chuyển đổi byte thành chuỗi bằng codec

Ngoài ra, chúng ta cũng có thể sử dụng mô-đun

>>> codecs.decode(b)
"Let's grab a 🍕!"
9 tích hợp cho mục đích này

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"

Tuy nhiên, bạn không thực sự cần phải chuyển tham số mã hóa, bạn nên chuyển nó vào

>>> codecs.decode(b)
"Let's grab a 🍕!"

Chuyển đổi byte thành chuỗi bằng str()

Cuối cùng, bạn có thể sử dụng hàm

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
0, hàm này chấp nhận nhiều giá trị khác nhau và chuyển đổi chúng thành chuỗi

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"

Tuy nhiên, hãy đảm bảo cung cấp đối số mã hóa cho

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
0, nếu không, bạn có thể nhận được một số kết quả không mong muốn

>>> str(b)
b'Lets grab a \xf0\x9f\x8d\x95!'

Điều này đưa chúng ta đến mã hóa một lần nữa. Nếu bạn chỉ định mã hóa sai, trường hợp tốt nhất là chương trình của bạn bị sập vì không thể giải mã dữ liệu. Ví dụ: nếu chúng tôi thử sử dụng hàm

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
0 với
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
3, chúng tôi sẽ nhận được kết quả

>>> str(b, 'UTF-16')
'敌❴\u2073牧扡愠\uf020趟↕'

Điều này thậm chí còn quan trọng hơn vì Python 3 thích sử dụng Unicode - vì vậy nếu bạn đang làm việc với các tệp hoặc nguồn dữ liệu sử dụng mã hóa tối nghĩa, hãy đảm bảo chú ý nhiều hơn

Chuyển đổi byte thành chuỗi trong Python 2

Trong Python 2, một gói byte và một chuỗi thực tế giống nhau - chuỗi là các đối tượng bao gồm các ký tự dài 1 byte, nghĩa là mỗi ký tự có thể lưu trữ 256 giá trị. Đó là lý do tại sao chúng đôi khi được gọi là bytestrings

Điều này thật tuyệt khi làm việc với dữ liệu byte - chúng tôi chỉ cần tải nó vào một biến và chúng tôi sẵn sàng in

>>> s = "Hello world!"

>>> s
'Hello world!'

>>> len(s)
12

Tuy nhiên, việc sử dụng các ký tự Unicode trong bytestrings sẽ thay đổi hành vi này một chút

Chuyển đổi byte thành Unicode (Python 2)

Ở đây, chúng ta sẽ phải sử dụng loại

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
4 của Python 2, được giả định và sử dụng tự động trong Python 3. Điều này lưu trữ các chuỗi dưới dạng một loạt các điểm mã, thay vì byte

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
5 biểu thị byte dưới dạng số hex có hai chữ số vì Python không biết cách biểu thị chúng dưới dạng ký tự ASCII

>>> u = u"Let's grab a 🍕!"
u"Let's grab a \U0001f355!""

>>> u
"Let's grab a 🍕!"
# Yum.

>>> len(u)
15

Như bạn có thể thấy ở trên, chuỗi Unicode chứa

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
6 - một ký tự thoát Unicode mà thiết bị đầu cuối của chúng tôi hiện biết cách in ra dưới dạng một lát bánh pizza. Việc thiết lập điều này dễ dàng như sử dụng công cụ xác định
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
7 trước giá trị của chuỗi phụ

Vì vậy, làm thế nào để tôi chuyển đổi giữa hai?

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Bạn có thể lấy chuỗi Unicode bằng cách giải mã chuỗi ký tự của mình. Điều này có thể được thực hiện bằng cách xây dựng một đối tượng Unicode, cung cấp chuỗi phụ và một chuỗi chứa tên mã hóa làm đối số hoặc bằng cách gọi

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
8 trên một chuỗi phụ

Chuyển đổi byte thành chuỗi bằng cách sử dụng giải mã () (Python 2)

Bạn cũng có thể sử dụng

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"
9 từ mô-đun
>>> codecs.decode(b)
"Let's grab a 🍕!"
9

>>> s = "Let's grab a \xf0\x9f\x8d\x95!"
>>> u = unicode(s, 'UTF-8')

>>> u
"Let's grab a 🍕!"

>>> s.decode('UTF-8')
"Let's grab a 🍕!"

Chuyển đổi byte thành chuỗi bằng codec (Python 2)

Hoặc, sử dụng mô-đun

>>> codecs.decode(b)
"Let's grab a 🍕!"
9

import codecs

>>> codecs.decode(s, 'UTF-8')
"Let's grab a 🍕!"

Hãy chú ý đến mã hóa của bạn

Một lời cảnh báo ở đây - byte có thể được diễn giải khác nhau trong các bảng mã khác nhau. Với khoảng 80 mã hóa khác nhau có sẵn, có thể không dễ để biết liệu bạn đã chọn đúng mã hay chưa

Tin nhắn ban đầu là

>>> str(b)
b'Lets grab a \xf0\x9f\x8d\x95!'
2 hoặc
>>> str(b)
b'Lets grab a \xf0\x9f\x8d\x95!'
3 và cả hai đều có vẻ là chuyển đổi hợp lệ

Phần kết luận

Là lập trình viên, có một số điều chúng ta phải thường xuyên suy nghĩ và tích cực chuẩn bị để tránh những cạm bẫy. Điều này đặc biệt đúng ở các cấp độ thấp hơn, nơi chúng tôi hiếm khi sử dụng ngôn ngữ cấp cao như Python làm trình điều khiển hàng ngày.

Những thứ như bộ ký tự, mã hóa và nhị phân ở đó để nhắc nhở chúng ta rằng công việc của chúng ta là viết mã - mã hóa suy nghĩ của chúng ta thành các giải pháp khả thi. Rất may, rất nhiều suy nghĩ này trở thành một phần thói quen của chúng tôi sau một vài vòng trên bàn phím

Làm cách nào để chuyển đổi byte thành CSV bằng Python?

Giải pháp nhanh .
Chuyển đổi đối tượng byte thành chuỗi bằng cách sử dụng str() và cắt [2. -1] để loại bỏ "b". '" kèm theo ký hiệu
Chuyển đổi chuỗi thành chuỗi có định dạng CSV bằng cách sử dụng chuỗi. thay thế ('\\t', ','). .
Ghi CSV vào một tệp bằng cách sử dụng hàm print() với file=open(. , 'w') đối số

Làm cách nào để đọc byte trong Python?

bạn có thể sử dụng bin(ord('b')) . replace('b', '') bin() nó cung cấp cho bạn biểu diễn nhị phân với 'b' sau bit cuối cùng, bạn phải xóa nó. Ngoài ra, ord() cung cấp cho bạn số ASCII cho ký tự được mã hóa char hoặc 8-bit/1 Byte.

Làm cách nào để chuyển đổi int thành byte trong Python?

Một giá trị int có thể được chuyển đổi thành byte bằng cách sử dụng phương thức int. to_bytes() .