Write a binary integer or string to a file in python

前端 未结 5 1817
梦毁少年i
梦毁少年i 2020-12-16 00:46

I have a string (it could be an integer too) in Python and I want to write it to a file. It contains only ones and zeros I want that pattern of ones and zeros to be written

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-16 01:28

    Appending to an array.array 3 bits at a time will still produce 8 bits for every value. Appending 011, 010, and 110 to an array and writing to disk will produce the following output: 00000011 00000010 00000110. Note all the padded zeros in there.

    It seems like, instead, you want to "compact" binary triplets into bytes to save space. Given the example string in your question, you can convert it to a list of integers (8 bits at a time) and then write it to a file directly. This will pack all the bits together using only 3 bits per value rather than 8.

    Python 3.4 example

    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
    

    Contents of byte.dat:

    • hex: 2D 60 12
    • binary (by 8 bits): 00101101 01100000 00010010
    • binary (by 3 bits): 001 011 010 110 000 000 010 010

                                          ^^ ^ (Note extra bits)
      

      Note that this method will pad the last values so that it aligns to an 8-bit boundary, and the padding goes to the most significant bits (left side of the last byte in the above output). So you need to be careful, and possibly add zeros to the end of your original string to make your string length a multiple of 8.

提交回复
热议问题