Writing Binary Files in Python 3.x

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
4 replies · 2K views
chaoticflow
Messages
8
Reaction score
0
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:
# 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.
 
Physics news on Phys.org
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.
 
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.
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:
  • Like
Likes   Reactions: FactChecker
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.
 
Integrand said:
Note that calling your list 'list' will mask the builtin type.
Which I didn't intend to do. I have edited my code to use a different variable name.
Integrand said:
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.