Hướng dẫn python read byte array

There is a file with following contents:

b'prefix:input_text'
b'oEffect:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'
b'oEffect:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'

This is my try to read the lines and convert them to readable utf characters, but still it shows the same strings in the output file:

f = open(input_file, "rb")
for x in f:
  inpcol.append(x.decode('utf-8'))

f = open(pred_file, "r")
for x in f:
  predcol.append(x)

f = open(target_file, "r")
for x in f:
  targcol.append(x)
data =[]
for i in tqdm(range(len(targcol))):
  data.append([inpcol[i],targcol[i],predcol[i]])

pd.DataFrame(data,columns=["input_text","target_text","pred_text"]).to_csv(f"{path}/merge_{predfile}.csv", encoding="utf-8")
print("Done!")

The output file is:

,input_text,target_text,pred_text
0,"b'prefix:input_text'
","target_text
","ﺏﺭﺎﯾ ﺩﺮﮐ ﻮﻀﻌﯿﺗ
"
1,"b'xNeed:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'
","ﺞﻨﮕﯾﺪﻧ
","ﺏﺭﺎﯾ ﭗﯾﺩﺍ ﮎﺭﺪﻧ ﯽﮐ ﺖﯿﻣ
"

As you see, the problem exists for input line but not for target and prediction lines (however scrambled but that's okay)

bytes() trong Python trả về các đối tượng byte là một chuỗi các số nguyên, không thể thay đổi, được khởi tạo với size và dữ liệu cho trước, trong phạm vi 0 <= x < 256.

Nếu bạn muốn sử dụng phiên bản có thể thay đổi, hãy dùng hàm bytearray().

Cú pháp của hàm bytes() là:

bytes([source[, encoding[, errors]]])
  • source: Tùy chọn. Nguồn để khởi tạo mảng byte.
  • encoding: Tùy chọn. Nếu source là string, thì đây là mã hóa của string đó.
  • errors: Tùy chọn. Nếu source là string, hành động sẽ được thực hiện khi quá trình mã hóa bị lỗi.

Tham số source có thể được sử dụng để khởi tạo byte array, tùy thuộc vào kiểu dữ liệu của source, theo những cách sau:

Kiểu của source Mô tả
String (chuỗi) Chuyển đổi string thành byte sử dụng str.encode(). Phải cung cấp tham số encoding, errors có thể có hoặc không.
Integer (số nguyên) Tạo mảng với size cho trước, tất cả được khởi tạo là null.
Object (đối tượng) Bộ đệm chỉ đọc của đối tượng sẽ được sử dụng để khởi tạo byte array.
Iterable (có thể lặp) Tạo một mảng có size bằng số lần lặp và được khởi tạo thành các phần tử lặp. Phải là các số nguyên có thể lặp, nằm trong khoảng 0 <= x < 256.
Không có tham số source Tạo một mảng có size bằng 0.

Ví dụ về hàm bytes() trong Python

Ví dụ 1: Chuyển đổi string sang byte

string = "Học Python trên quantrimang.com thật vui."
#string với mã hóa 'utf-8'
mang = bytes(string, 'utf-8')
print(mang)

Khi chạy code trên ta nhận được kết quả đầu ra như sau:

b'H\xe1\xbb\x8dc Python tr\xc3\xaan quantrimang.com th\xe1\xba\xadt vui.'

Ví dụ 2: Tạo mảng số nguyên với size cho trước

size = 5
mang = bytes(size)
print(mang)

Khi chạy code trên bạn sẽ nhận được output như sau:

b'\x00\x00\x00\x00\x00'

bytes() hay bytesarray() chỉ là hai trong số rất nhiều hàm Python được tích hợp sẵn

Đăng nhập

bytes() trong Python trả về các đối tượng byte là một chuỗi các số nguyên, không thể thay đổi, được khởi tạo với size và dữ liệu cho trước, trong phạm vi 0 <= x < 256.

Nếu bạn muốn sử dụng phiên bản có thể thay đổi, hãy dùng hàm bytearray().

Cú pháp của hàm bytes() là:

bytes([source[, encoding[, errors]]])
  • source: Tùy chọn. Nguồn để khởi tạo mảng byte.
  • encoding: Tùy chọn. Nếu source là string, thì đây là mã hóa của string đó.
  • errors: Tùy chọn. Nếu source là string, hành động sẽ được thực hiện khi quá trình mã hóa bị lỗi.

Tham số source có thể được sử dụng để khởi tạo byte array, tùy thuộc vào kiểu dữ liệu của source, theo những cách sau:

Kiểu của source Mô tả
String (chuỗi) Chuyển đổi string thành byte sử dụng str.encode(). Phải cung cấp tham số encoding, errors có thể có hoặc không.
Integer (số nguyên) Tạo mảng với size cho trước, tất cả được khởi tạo là null.
Object (đối tượng) Bộ đệm chỉ đọc của đối tượng sẽ được sử dụng để khởi tạo byte array.
Iterable (có thể lặp) Tạo một mảng có size bằng số lần lặp và được khởi tạo thành các phần tử lặp. Phải là các số nguyên có thể lặp, nằm trong khoảng 0 <= x < 256.
Không có tham số source Tạo một mảng có size bằng 0.

Ví dụ về hàm bytes() trong Python

Ví dụ 1: Chuyển đổi string sang byte

string = "Học Python trên quantrimang.com thật vui."
#string với mã hóa 'utf-8'
mang = bytes(string, 'utf-8')
print(mang)

Khi chạy code trên ta nhận được kết quả đầu ra như sau:

b'H\xe1\xbb\x8dc Python tr\xc3\xaan quantrimang.com th\xe1\xba\xadt vui.'

Ví dụ 2: Tạo mảng số nguyên với size cho trước

size = 5
mang = bytes(size)
print(mang)

Khi chạy code trên bạn sẽ nhận được output như sau:

b'\x00\x00\x00\x00\x00'

bytes() hay bytesarray() chỉ là hai trong số rất nhiều hàm Python được tích hợp sẵn

Đăng nhập

Trong Python 2, cả str và byte đều là cùng một đối tượng typeByte trong khi đó, trong Python 3 các đối tượng Byte được định nghĩa được định nghĩa là string byte và tương tự như các đối tượng unicode trong Python 2. Tuy nhiên, có nhiều sự khác biệt giữa những string và Đối tượng byte. Một số trong số chúng được mô tả dưới đây:

  • Các đối tượng Byte là string Byte , trong khi String là string ký tự .
  • Các đối tượng byte ở dạng máy có thể đọc được bên trong, String chỉ ở dạng người có thể đọc được .
  • Vì các đối tượng Byte có thể đọc được bằng máy, nên chúng có thể được lưu trữ trực tiếp trên đĩa. Trong khi đó, String cần được mã hóa trước khi chúng có thể được lưu trữ trên đĩa.
  • Có các phương thức để chuyển đổi một đối tượng byte thành String và String thành các đối tượng byte.

1. Mã hóa

PNG, JPEG, MP3, WAV, ASCII, UTF-8, vv là các dạng mã hóa khác nhau. Mã hóa là một định dạng để biểu hiện âm thanh, hình ảnh, văn bản, vv theo byte. Chuyển đổi string

thành các đối tượng byte được gọi là mã hóa. Đây là điều cần thiết để văn bản có thể được lưu trữ trên đĩa bằng cách sử dụng ánh xạ, các kỹ thuật mã hóa ASCII hoặc UTF-8.

Nhiệm vụ này đạt được bằng cách sử dụng phương thức encode(). Nó lấy kỹ thuật mã hóa làm đối số. Kỹ thuật mặc định là kỹ thuật UTF-8.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python code to demonstate String encoding 
  
# initialising a String  
a = 'Cafedev'
  
# initialising a byte object 
c = b'Cafedev'
  
# using encode() to encode the String 
# encoded version of a is stored in d 
# using ASCII mapping 
d = a.encode('ASCII') 
  
# checking if a is converted to bytes or not 
if (d==c): 
    print ("Encoding successful") 
else : print ("Encoding Unsuccessful") 

Kết quả:

Encoding successful

2. Giải mã

Tương tự, Giải mã là quá trình chuyển đổi một đối tượng Byte thành String. Nó được thực hiện bằng cách sử dụng phương thức decode(). Một string byte có thể được giải mã trở lại thành một string ký tự, nếu bạn biết mã hóa nào đã được sử dụng để mã hóa nó. Mã hóa và giải mã là các quá trình nghịch đảo nhau.


# Python code to demonstate Byte Decoding 
  
# initialising a String  
a = 'Cafedev'
  
# initialising a byte object 
c = b'Cafedev'
  
# using decode() to decode the Byte object 
# decoded version of c is stored in d 
# using ASCII mapping 
d = c.decode('ASCII') 
  
# checking if c is converted to String or not 
if (d==a): 
    print ("Decoding successful") 
else : print ("Decoding Unsuccessful") 

Kết quả:

Decoding successful

Nguồn và Tài liệu tiếng anh tham khảo:

  • w3school
  • python.org
  • geeksforgeeks

Tài liệu từ cafedev:

  • Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
  • Ebook về python tại đây.
  • Các series tự học lập trình khác

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

  • Group Facebook
  • Fanpage
  • Youtube
  • Instagram
  • Twitter
  • Linkedin
  • Pinterest
  • Trang chủ

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!