Ghi bit vào tập tin python

Vấn đề là b"101010" vẫn là một chuỗi. Chữ 'b' có thể làm bạn bối rối. nó không có nghĩa là "chuyển đổi chuỗi này thành byte nhị phân"

Để chuyển đổi một chuỗi chứa '1' và '0' thành một giá trị số [int], hãy làm điều này

# Convert string to int using base 2 
# [2=binary, 10=dec, 16=hex etc..]
byte = int['101010', 2] 
print byte
print '%X' % byte  # print as hexadecimal

Sau đó, bạn có thể ghi byte vào một tệp như thế này

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]

Kiểm tra bằng hexdump

shell$ hexdump -C /tmp/bytes.bin
00000000  31 32 33 ff    |123.|
00000004

Có lẽ hiệu quả hơn và tốt hơn [được cho là nhiều hơn cách python muốn bạn ghi dữ liệu nhị phân]

#!/usr/bin/env python

import array

# An python array is like a restricted python list 
# for storing binary data.
#
data = array.array['B']  # create array of bytes.

data.append[int['1000001', 2]] # binary for ascii 'A'
data.append[int['1000010', 2]] # binary for ascii 'B'
data.append[int['1000011', 2]] # binary for ascii 'C'
data.append[int['11111111', 2]] # 255, 0xFF

print data

# Write the array at once to a file
#
f = file['/tmp/data.bin', 'wb']
data.tofile[f]
f.close[]

Kiểm tra kết quả

shell$ python ./binary.py 
array['b', [65, 66, 67, 255]]
shell$ hexdump -C /tmp/data.bin 
00000000  41 42 43 ff     |ABC.|
00000004

Trang này cũng có thể hữu ích

💬 câu hỏi. Đưa ra một chuỗi nhị phân trong tập lệnh Python của bạn, chẳng hạn như

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
6. Làm cách nào để ghi chuỗi nhị phân vào một tệp trong Python?

Ví dụ: bạn có thể đã thử một đoạn mã như thế này nhưng không hoạt động với

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
7

bin_str = b'this is a binary string'
with open['my_file.bin', 'w'] as f:
    f.write[bin_str]

Bởi vì điều này mang lại một

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
8

Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes

Làm thế nào để khắc phục điều này?

Dung dịch

Để ghi một chuỗi nhị phân vào tệp nhị phân, bạn cần mở tệp ở chế độ “ghi nhị phân” bằng cách sử dụng 'wb' làm đối số vị trí thứ hai của hàm open[]. Chẳng hạn, bạn sẽ viết

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
9 thay vì
shell$ hexdump -C /tmp/bytes.bin
00000000  31 32 33 ff    |123.|
00000004
0. Bây giờ, trên đối tượng tệp kết quả là
shell$ hexdump -C /tmp/bytes.bin
00000000  31 32 33 ff    |123.|
00000004
1, bạn có thể sử dụng
Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
0

Đây là một ví dụ tối thiểu hiện tạo và ghi chính xác vào tệp nhị phân

Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
1

bin_str = b'this is a binary string'
with open['my_file.bin', 'wb'] as f:
    f.write[bin_str]

Tệp kết quả trông như thế này

⚡ cảnh báo. Nếu bạn sử dụng phương pháp

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
7, bạn sẽ ghi đè hoàn toàn nội dung của tệp. Và Python sẽ không hỏi lại bạn nếu bạn chắc chắn muốn tiếp tục. Vì vậy, chỉ sử dụng điều này nếu bạn chắc chắn muốn ghi đè lên nội dung tệp

Nối chuỗi nhị phân vào tệp nhị phân

Nếu bạn muốn nối thêm dữ liệu nhị phân vào cuối tệp mà không ghi đè lên nội dung của tệp, bạn có thể mở tệp ở chế độ nối thêm [

Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
3] và nhị phân [
Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
4] bằng cách sử dụng biểu thức
Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
5. Sau đó, sử dụng
Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
6 để nối
Traceback [most recent call last]:
  File "C:\...\code.py", line 3, in 
    f.write[bin_str]
TypeError: write[] argument must be str, not bytes
7 vào cuối tệp hiện có

Đây là một ví dụ

byte1 = int['110001', 2] # ascii for '1'
byte2 = int['110010', 2] # ascii for '2'
byte3 = int['110011', 2] # ascii for '3'
byte4 = int['11111111', 2] # 255, 0xFF

f = file['/tmp/bytes.bin', 'wb']
f.write['%c' % byte1]
f.write['%c' % byte2]
f.write['%c' % byte3]
f.write['%c' % byte4]
f.close[]
5

Sau khi chạy đoạn mã này, tệp nhị phân hiện chứa cùng một nội dung hai lần — nội dung ban đầu không bị ghi đè do sử dụng chế độ chắp thêm

🌎 Hướng dẫn đề xuất. Làm cách nào để thêm vào cuối tệp?

Chris

Trong khi làm việc với tư cách là nhà nghiên cứu về các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Là gì. bin trong Python?

Tệp chứa dữ liệu nhị phân được gọi là tệp nhị phân. Mọi dữ liệu nhị phân được định dạng hoặc không được định dạng đều được lưu trữ trong tệp nhị phân và tệp này không thể đọc được ở người và được máy tính sử dụng trực tiếp

Viết byte là gì?

Byte là đơn vị thông tin số thường bao gồm tám bit . Trong lịch sử, byte là số bit được sử dụng để mã hóa một ký tự văn bản trong máy tính và vì lý do này, nó là đơn vị bộ nhớ có thể định địa chỉ nhỏ nhất trong nhiều kiến ​​trúc máy tính.

Hàm nào được sử dụng để ghi dữ liệu ở chế độ nhị phân trong Python?

Ghi vào tệp nhị phân bằng Python . wb mode to write to a binary file.

Tệp văn bản và tệp nhị phân trong Python là gì?

Chủ yếu có hai loại tệp dữ liệu - tệp văn bản và tệp nhị phân. Một tệp văn bản bao gồm các ký tự mà con người có thể đọc được, có thể được mở bởi bất kỳ trình soạn thảo văn bản nào. Mặt khác, các tệp nhị phân được tạo thành từ các ký tự và ký hiệu không thể đọc được của con người, yêu cầu các chương trình cụ thể để truy cập nội dung của nó

Chủ Đề