Binary files in Python
Topic Covered
Binary file: basic operations on a binary file:
open using file open modes (rb, rb+, wb, wb+, ab, ab+),close a binary file
import pickle module,
dump() and load() method,
read, write/create, search, append and update operations in a binary file
Binary File in Python
● Binary file(used to store binary data such as images, video files, audio files etc.) is a non-text file. It contains data as 1s and 0s(computer readable format).
● Binary files are processed byte by byte.
● There is no delimiter and EOL character in the binary file.
● Binary files are faster in processing and consumes less memory compared to text files.
● Extension of binary files .bin(.dat allowed?)
● pickle module is offering functions(dump and load) to operating binary files.
● File opening mode must attach ‘b’ to it for operating binary file(Ex: ‘rb’- for reading)
Basic operations with binary files:
a. Reading data from a file
b. Writing data to a file
c. Appending data to a file
d. Deleting a file
When we want to write and read list, dictionary etc. then we have to use a module in python known as pickle.
The pickle module is used for implementing binary protocols for serializing and de-serializing a Python object structure.
Pickling: It is a process where a Python object hierarchy is converted into a byte stream.
Unpickling: It is the inverse of Pickling process where a byte stream is converted into an object hierarchy.
open using file open modes
• rb, rb+
• wb, wb+
• ab, ab+
module
import pickle
Module Interface functions:
pickle.dump(data, fileObject) – This function is called to serialize an object hierarchy.
data = pickle.load(fileObject) – This function is called to de-serialize a data stream
Writing list in file
Write a program to create a list L and store it to binary file “test”
Ans. import pickle as p
L=[‘a’,’b’,’c’,’d’]
with open(‘test’,’wb’) as f:
p.dump(L,f)
Reading file : Unpickle a list
Write a program to read the data from Binary File “test” and display on screen
Ans. import pickle as p
with open(‘test’,’rb’) as f:
L=p.load(f)
print(L)
output:
[‘a’, ‘b’, ‘c’, ‘d’]
Write a program to add records in pickle file ‘student’ with the following fields
rollno
name of students
marks of subject 1
marks of subject 2
marks of subject 3
sum of marks of all subjcts
Ans.
import pickle as p
L=[]
ch=’Y’
while ch==’Y’ :
roll=int(input(“enter rollno”))
name=input(“enter name”)
sub1=int(input(“enter marks of subject1:”))
sub2=int(input(“enter marks of subject2:”))
sub3=int(input(“enter marks of subject3:”))
total=sub1+sub2+sub3
record=[roll,name,sub1,sub2,sub3,total]
L.append(record)
ch=input(“do u want to add more records”).upper()
with open(‘student’,’wb’) as f:
p.dump(L,f)
Output:
enter rollno 3
enter name c
enter marks of subject1:34
enter marks of subject2:56
enter marks of subject3:78
do u want to add more records n
Searching in file
Write a program to search for the details (name,total) of student which roll no is read during the execution of the program.
Ans.
import pickle as p
L=[]
roll=int(input(“enter rollno to serarch”))
with open(‘student’,’rb’) as f:
L=p.load(f)
for r in L:
if r[0]==roll:
print(“name=”,r[1])
print(“Total=”,r[5])
break
else:
print(“not found”)
Output
enter rollno to serarch 1
name= a
Total= 132
====================================
enter rollno to serarch 2
name= b
Total= 198
=====================================
enter rollno to serarch 4
not found
Modify records:
Write a program to update the file with a new value of Name. The values of name and rollno are read duringthe execution of the program.
Ans.
import pickle as p
L=[]
temp=False
newlist=[]
roll=int(input(‘enter rollno to modfiy the name’))
with open(‘student’,’rb’) as f:
L=p.load(f)
for r in L:
if r[0]==roll:
temp=True
print(“name is”,r[1])
r[1]=input(“enter new name :”)
newlist.append(r)
if temp==False:
print(‘record not found’)
else:
with open(‘student’,”wb”) as f:
p.dump(newlist,f)
#print data after modification
with open(‘student’,’rb’) as f2:
L=p.load(f2)
print(‘roll\tName\tTotal’)
for r in L:
print(r[0],’\t’,r[1],’\t’,r[5]) #or print(r[0],r[1],r[5],sep=”\t”)
Output
enter rollno to modfiy the name5
record not found
====================================
enter rollno to modfiy the name2
name is b
enter new name :z
Write data to a Binary File:
fout=open(“test1.dat”,”wb”)
str1= “My First Binary File”
str2= str1.encode (“ASCII”)
fout.write(str2)
fout.close( ) Output:test1.dat file My First Binary File
Read the data from Binary File:
fin=open(“test1.dat”,”rb”)
str1= fin.read( )
str2 =str1.decode(“ASCII”)
print(str2)
fin.close( ) Output: My First Binary File
d) Write list to a Binary File
L1 = [23, 43, 55, 10, 90]
F= open(“test1.dat”, “wb”) F.write(bytearray(L1))
F.close() Output:test1.dat file 23 43 55 10 90
e)Read list from Binary File
F= open(“test1.dat”, “rb”) L1=list(F.read())
F.close()
print(L1) Output:[23, 43, 55, 10, 90]