Hướng dẫn python write binary string to file - python ghi chuỗi nhị phân vào tệp

12

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một chuỗi (nó cũng có thể là một số nguyên) trong Python và tôi muốn viết nó vào một tệp. Nó chỉ chứa những cái và số không tôi muốn mẫu của các cái và số không được ghi vào một tệp. Tôi muốn viết trực tiếp nhị phân vì tôi cần lưu trữ nhiều dữ liệu, nhưng chỉ có các giá trị nhất định. Tôi thấy không cần phải chiếm không gian sử dụng tám bit cho mỗi giá trị khi tôi chỉ cần ba.

Ví dụ. Giả sử tôi đã viết chuỗi nhị phân

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
0 vào một tệp. Nếu tôi mở nó trong một trình soạn thảo văn bản, nó sẽ nói
import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
1 (01100010 là mã ASCII cho B). Đừng nhầm lẫn mặc dù. Tôi không muốn viết mã ASCII, ví dụ chỉ là để chỉ ra rằng tôi muốn viết trực tiếp các byte vào tệp.


Clarification:

Chuỗi của tôi trông giống như thế này:

binary_string = "001011010110000010010"

Nó không được làm bằng mã nhị phân cho số hoặc ký tự. Nó chỉ chứa dữ liệu tương đối với chương trình của tôi.

Hướng dẫn python write binary string to file - python ghi chuỗi nhị phân vào tệp

Duhaime

24K14 Huy hiệu vàng156 Huy hiệu bạc200 Huy hiệu đồng14 gold badges156 silver badges200 bronze badges

Đã hỏi ngày 2 tháng 6 năm 2013 lúc 21:29Jun 2, 2013 at 21:29

Để viết ra một chuỗi, bạn có thể sử dụng phương thức

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
2 của tệp. Để viết một số nguyên, bạn sẽ cần sử dụng mô -đun
import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
3

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')

Tuy nhiên, biểu diễn của int và chuỗi là khác nhau, bạn có thể sử dụng hàm

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
4 thay thế để biến nó thành chuỗi 0 và 1

>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'

Nhưng có lẽ cách tốt nhất để xử lý tất cả các

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
5 này là quyết định độ rộng cố định cho các chuỗi nhị phân trong tệp và chuyển đổi chúng như vậy:

>>> x = 7
>>> '{0:032b}'.format(x) #32 character wide binary number with '0' as filler
'00000000000000000000000000000111'

Hướng dẫn python write binary string to file - python ghi chuỗi nhị phân vào tệp

Thiết quyền

10,4K2 Huy hiệu vàng17 Huy hiệu bạc32 Huy hiệu đồng2 gold badges17 silver badges32 bronze badges

Đã trả lời ngày 2 tháng 6 năm 2013 lúc 21:52Jun 2, 2013 at 21:52

Hướng dẫn python write binary string to file - python ghi chuỗi nhị phân vào tệp

Ryan Hainingan HainingRyan Haining

33.7K12 Huy hiệu vàng105 Huy hiệu bạc167 Huy hiệu đồng12 gold badges105 silver badges167 bronze badges

3

Được rồi, sau khi tìm kiếm nhiều hơn một chút, tôi đã tìm thấy một câu trả lời. Tôi tin rằng những người còn lại chỉ đơn giản là không hiểu (đó có lẽ là lỗi của tôi, vì tôi phải chỉnh sửa hai lần để làm rõ). Tôi tìm thấy nó ở đây.

Câu trả lời là phân chia từng phần dữ liệu, chuyển đổi chúng thành một số nguyên nhị phân sau đó đặt chúng vào một mảng nhị phân. Sau đó, bạn có thể sử dụng phương thức

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
6 của mảng để ghi vào tệp.

from array import *

bin_array = array('B')

bin_array.append(int('011',2))
bin_array.append(int('010',2))
bin_array.append(int('110',2))

with file('binary.mydata', 'wb') as f:
    bin_array.tofile(f)

Hướng dẫn python write binary string to file - python ghi chuỗi nhị phân vào tệp

Ryan Haining

33.7K12 Huy hiệu vàng105 Huy hiệu bạc167 Huy hiệu đồng12 gold badges105 silver badges167 bronze badges

Được rồi, sau khi tìm kiếm nhiều hơn một chút, tôi đã tìm thấy một câu trả lời. Tôi tin rằng những người còn lại chỉ đơn giản là không hiểu (đó có lẽ là lỗi của tôi, vì tôi phải chỉnh sửa hai lần để làm rõ). Tôi tìm thấy nó ở đây.Jun 2, 2013 at 23:36

Câu trả lời là phân chia từng phần dữ liệu, chuyển đổi chúng thành một số nguyên nhị phân sau đó đặt chúng vào một mảng nhị phân. Sau đó, bạn có thể sử dụng phương thức

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
6 của mảng để ghi vào tệp.KFox

Ryan Haining3 gold badges9 silver badges34 bronze badges

Đã trả lời ngày 2 tháng 6 năm 2013 lúc 23:36

Kfoxkfox

from cStringIO import StringIO

s = "001011010110000010010"
sio = StringIO(s)

f = open('outfile', 'wb')

while 1:
    # Grab the next 8 bits
    b = sio.read(8)

    # Bail if we hit EOF
    if not b:
        break

    # If we got fewer than 8 bits, pad with zeroes on the right
    if len(b) < 8:
        b = b + '0' * (8 - len(b))

    # Convert to int
    i = int(b, 2)

    # Convert to char
    c = chr(i)

    # Write
    f.write(c)

f.close()

1.1163 huy hiệu vàng9 Huy hiệu bạc34 Huy hiệu đồng

0000000: 00101101 01100000 10010000                             -`.

Tôi muốn mẫu của những cái và số không được ghi vào một tệp.Jun 2, 2013 at 22:16

Nếu bạn có nghĩa là bạn muốn viết một luồng từ một chuỗi sang một tệp, bạn sẽ cần một cái gì đó như thế này ...Aya

... mà

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
7 hiển thị ...6 gold badges54 silver badges55 bronze badges

1

Đã trả lời ngày 2 tháng 6 năm 2013 lúc 22:16

my_number = 1234
with open('myfile', 'wb') as file_handle:
    file_handle.write(struct.pack('i', my_number))
...
with open('myfile', 'rb') as file_handle:
    my_number_back = struct.unpack('i', file_handle.read())[0]

AyaayaSep 20, 2016 at 5:04

37,7K6 Huy hiệu vàng54 Huy hiệu bạc55 Huy hiệu ĐồngThorSummoner

Ví dụ ngắn gọn:13 gold badges130 silver badges138 bronze badges

0

Đã trả lời ngày 20 tháng 9 năm 2016 lúc 5:04

Thorsummonerthorsummoner

15.2K13 Huy hiệu vàng130 Huy hiệu bạc138 Huy hiệu đồng

original_string = '001011010110000010010'

# first split into 8-bit chunks
bit_strings = [original_string[i:i + 8] for i in range(0, len(original_string), 8)]

# then convert to integers
byte_list = [int(b, 2) for b in bit_strings]

with open('byte.dat', 'wb') as f:
    f.write(bytearray(byte_list))  # convert to bytearray before writing

Nối vào

import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
8 3 bit cùng một lúc vẫn sẽ tạo ra 8 bit cho mỗi giá trị. Lắp đặt
import struct

#...
with open('file.dat', 'wb') as f:
    if isinstance(value, int):
        f.write(struct.pack('i', value)) # write an int
    elif isinstance(value, str):
        f.write(value) # write a string
    else:
        raise TypeError('Can only write str or int')
9,
>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'
0 và
>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'
1 vào một mảng và ghi vào đĩa sẽ tạo ra đầu ra sau:
>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'
2. Lưu ý tất cả các số không có đệm trong đó.

  • Có vẻ như, thay vào đó, bạn muốn "nhỏ gọn" bộ ba nhị phân vào byte để tiết kiệm không gian. Đưa ra chuỗi ví dụ trong câu hỏi của bạn, bạn có thể chuyển đổi nó thành một danh sách các số nguyên (8 bit cùng một lúc) và sau đó viết trực tiếp vào một tệp. Điều này sẽ đóng gói tất cả các bit với nhau chỉ bằng 3 bit cho mỗi giá trị thay vì 8.
  • Ví dụ Python 3.4
  • Nội dung của byte.dat:

                                        ^^ ^ (Note extra bits)
    

    Hex:

    >>> bin(7)
    '0b111'
    >>> bin(7)[2:] #cut off the 0b
    '111'
    
    3

nhị phân (bằng 8 bit):

>>> bin(7)
'0b111'
>>> bin(7)[2:] #cut off the 0b
'111'
4Mar 30, 2016 at 22:25

Làm thế nào để bạn viết dữ liệu nhị phân vào một tệp trong Python?

Sử dụng tệp ...
File = Open ("Sample.bin", "WB").
tập tin. Viết (b "Chuỗi nhị phân này sẽ được viết vào sample.bin").
tập tin. gần().

Làm thế nào để bạn viết một chuỗi nhị phân trong Python?

Cách chuyển đổi một chuỗi thành nhị phân trong Python..
A_String = "ABC".
a_byte_array = bytearray (a_string, "utf8") tạo bytearray ..
byte_list = [].
cho byte trong a_byte_array:.
Binary_Representation = Bin (byte) Chuyển đổi sang nhị phân ..
byte_list.Phụ lục (Binary_Representation) Thêm vào danh sách ..
print(byte_list).

Làm thế nào để bạn viết một tệp nhị phân?

Để ghi vào một tệp nhị phân, hãy sử dụng phương thức WriteallBytes, cung cấp đường dẫn tệp và tên và các byte được viết.Ví dụ này bổ sung khách hàng mảng dữ liệu vào tệp có tên là thu thập được.dat.Use the WriteAllBytes method, supplying the file path and name and the bytes to be written. This example appends the data array CustomerData to the file named CollectedData. dat .

Định dạng tệp nhị phân trong Python là gì?

Một tệp nhị phân là một tệp có nội dung ở định dạng nhị phân bao gồm một loạt các byte tuần tự, mỗi loại có chiều dài tám bit.Nội dung phải được giải thích bởi một chương trình hoặc bộ xử lý phần cứng hiểu trước chính xác cách nội dung đó được định dạng và cách đọc dữ liệu.a file whose content is in a binary format consisting of a series of sequential bytes, each of which is eight bits in length. The content must be interpreted by a program or a hardware processor that understands in advance exactly how that content is formatted and how to read the data.