Python Writing Binary Files in Python 3.x

Click For Summary
To read and write binary files in Python 3, it's important to use the correct methods for handling binary data. The built-in `bin` function is misunderstood in the initial code, as it returns a string representation of a number in binary format, not suitable for direct binary file writing. Instead, the `struct` module is recommended for packing and unpacking binary data. A simple approach involves creating a list of integers, packing them into a binary format using `struct.pack`, and writing this packed data to a file opened in binary mode. When reading the data back, `struct.unpack` can be used to convert the binary data back into a list of integers. It's also noted that using the name 'list' for a variable can overshadow the built-in list type, and that explicit file closure is unnecessary when using a context manager with the `with` statement, as it automatically handles file closure.
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.
 
Technology 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 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.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 2 ·
Replies
2
Views
1K
Replies
55
Views
6K
Replies
3
Views
3K
  • · Replies 34 ·
2
Replies
34
Views
5K
  • · Replies 47 ·
2
Replies
47
Views
4K
  • · Replies 57 ·
2
Replies
57
Views
5K
  • · Replies 28 ·
Replies
28
Views
4K
  • · Replies 12 ·
Replies
12
Views
9K
Replies
4
Views
2K
  • · Replies 43 ·
2
Replies
43
Views
4K