Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Writing Binary Files in Python 3.x

  1. Dec 14, 2015 #1
    Hi,

    I've been trying to write a simple binary file in Python 3 and have not yet been able to find a clear answer / solution online.

    Could you please suggest a simple way to read / write binary files in Python 3?

    My Code:

    Code (Text):


    # Create Binary File

    def dec_base(k,b=2):
        """ Default base is 2 """
        num = ""
        while k:
            num +=str(k%b)
            k = k//2
        return int(num)

    test_list = []
    for i in range(10):
        test_list.append(dec_base(i))
     
    with open("test.bin", "wb") as f:
        for i in test_list:
            f.write(bin(int(i)))

     
    Any help is appreciated.
     
  2. jcsd
  3. Dec 14, 2015 #2
    You have misunderstood the builtin bin function. Print its output to the console to see what it does. If you must write ints to a binary file, you wil need to choose an encoding. Use the struct module.
     
  4. Dec 15, 2015 #3

    Mark44

    Staff: Mentor

    The following code creates and initializes a list object (numList), and then packs it into a struct named buf. The code writes the struct to a file opened in binary mode, and closes the file.

    After that, the code reopens the file, reads the contents, and unpacks the contents into a list. After printing the list, the code closes the file again.

    In the pack and unpack operations, the "10i" string is a format string used to pack or unpack the 10 integer values.
    Code (Python):

    import struct

    numList = []
    with open("test.bin", "wb") as f:
       for i in range(10):
          numList.append(i)

       buf = struct.pack( "10i",  *numList)
       f.write(buf)
       f.close()

    with open("test.bin", "rb") as f:
       f.read(-1)
       list = struct.unpack("10i", buf)
       print(numList)
       f.close()
     
     
    Last edited: Dec 15, 2015
  5. Dec 15, 2015 #4
    Note that calling your list 'list' will mask the builtin type. Also note that explicit closing of the file is unnecessary within the with context manager. The file object's __exit__ method will close the file.
     
  6. Dec 15, 2015 #5

    Mark44

    Staff: Mentor

    Which I didn't intend to do. I have edited my code to use a different variable name.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Writing Binary Files in Python 3.x
Loading...