Để 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 hexadecimalSau đó, 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.| 00000004Có 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.| 00000004Trang 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.| 000000040. 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.| 000000041, 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
1bin_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