Professional Documents
Culture Documents
Chapter 2 Notes
Chapter 2 Notes
Types of File:
There are two types of files:
Text Files- A files whose contents can be viewed using a text editor is
called a text file. A text file is simply a sequence of ASCII or Unicode
characters. Python programs, contents written in text editors are some of
the example of text files. e.g. .txt,.rtf,.csv etc.
Binary Files-A binary file stores the data in the same way as stored in the
memory. The .exe files, mp3 file, image files, word documents are some of
the examples of binary files. We can’t read a binary file using a text editor
.e.g. .bmp, .cdr etc.
CSV File- CSV (Comma Separated Values) is a file format for data storage
which looks like a text file. The information is organized with one record on
each line and each field is separated by comma.
Text File Binary File
Its Bits represent character. Its Bits represent a custom data.
Less prone to get corrupt as Can easily get corrupted, corrupt on even
change reflects as soon as made single bit change
and can be
undone.
Store only plain text in a file. Can store different types of data
(audio, text, image) in a single file.
Widely used file format and can Developed for an application and can
be opened in any text editor. be opened in that application only.
Mostly .txt,.rtf are used Can have any application
as extensions to text files. defined extension.
Opening a File:
here disk file “story.txt” is loaded in memory and its reference is linked to
“myfile” object, now python program will access “story.txt” through
“myfile” object.
here “story.txt” is present in the same folder where .py file is stored
otherwise if disk file to work is in another folder we have to give full path.
Example:
myfile = open(“test.txt”,”r”)
here “r” is for read (although it is by default, other options are “w” for
write, “a” for append)
Example:
myfile = open(“d:\\mydata\\poem.txt”,”r”)
here we are accessing “poem.txt” file stored in separate location i.e. d:\
mydata folder.
at the time of giving path of file we must use double backslash (\\) in place
of single backslash because in python single slash is used for escape
character and it may cause problem like if the folder name is “temp” and we
provide path as d:\temp\poem.txt then in \temp “\n” will become escape
character for new line, so always use double backslash in path
Another solution of double backslash is using “r” before the path making
the string as raw string i.e. no special meaning attached to any character as:
myfile = open(r“d:\mydata\poem.txt”,”r”)
In the above example “myfile” is the file object or file handle or file
pointer holding the reference of disk file.
Closing a File:
myfile.close()
Note: open function is built-in function used standalone while close() must
be called through file handle
output:
first read() will show = this is
my second read() will show =
firs third read() will show = t
file this is first line
this is second line
this is third line
Output:
first read() will show = this is my first file
this is first line
this is second line
this is third line
Example (readline())
Test.txt
this is my first file
this is first line
this is second line
this is third line
# data file handling to readline
myfile = open('test.txt','r')
line1 = myfile.readline()
line2 = myfile.readline()
line3 = myfile.readline(10)
print(line1)
print(line2)
print(line3)
Output:
this is my first file
this is se
Output:
this is my first file
this is first line
this is se
Output:
this is my first file
this is first line
this is second line
this is third line
Output:
Total Size= 81
Size after removing EOL and blank 76
Example readlines()
Test.txt
this is my first file
this is first line
this is second line
this is third line
myfile= open('test.txt', 'r')
contents = myflie.readlines()
print(contents)
print(“First line is:”, contents[0])
print(“Last line is:”, contents[len(contetns)-1])
Output:
['this is my first file\n', 'this is first line\n', 'this is second line\n', 'this is third line']
First line is: this is my first file
More Examples:
myfile =open('test.txt','r')
str=myfile.read()
size=len(str)
print('Size of file in bytes=',
size) myfile.close()
Output;
Size of file in bytes= 79
myfile =open('test.txt','r')
str=myfile.readlines()
lines=len(str)
print('Number of lines in file=', lines)
myfile.close()
Output;
Number of lines in file= 4
Writing on to Files:
After read operation, let us take an example of how to write data in disk
files. Python provides functions:
The above functions are called by the file object to write desired content.
Example: write()
myfile=open('student.txt','w')
for i in range(3):
name = input('Enter name to store :')
myfile.write(name)
myfile.write('\n')
myfile.close()
print('\n data saved successfully…')
Example: append
myfile=open('student.txt','a')
for i in range(3):
name = input('Enter name to store :')
myfile.write(name)
myfile.write('\n')
myfile.close()
print('\n data saved successfully…')
Example: writelines()
myfile=open('emp.txt','w')
mylist = []
for i in range(3):
name = input('Enter name of employee :')
mylist.append(name+'\n')
myfile.writelines(mylist)
myfile.close()
print('\n data saved successfully…')
Example: Writing String as a record to file
myfile1 = open('book.txt','r')
myfile2 =
open('book_copy.txt','w') str1= " "
while str1:
str1=myfile1.readline()
myfile2.write(str1)
myfile1.close()
myfile2.close()
print('Files copied successfully….')
read() and readline() reads data from file and return it in the form of
string and readlines() returns data in the form of list.
All these read function also read leading and trailing whitespaces, new line
characters. If you want to remove these characters you can use functions
myfile = open('testfile.txt')
line1=myfile.readline()
print('length of line is:', len(line1))
line1=line1.rstrip('\n')
print('length of line is:', len(line1))
line2=myfile.readline()
print('length of line is:', len(line2))
line2=line2.lstrip()
print('length of line is:', len(line2))
File Pointer:
Every file maintains a file pointer which tells the current position in the file
where reading and writing operation will take.
The tell () method of python tells us the current position within the file,
whereas The seek(offset[, from]) method changes the current file
position. If from is 0, the beginning of the file to seek. If it is set to 1, the
current position is used. If it is set to 2 then the end of the file would be
taken as seek position. The offset argument indicates the number of bytes
to be moved.
f = open("a.txt", 'w')
line = 'Welcome to India \n Enjoy Indian Dishes'
f.write(line)
f.close()
f = open("a.txt", 'rb+')
print(f.tell())
print(f.read(7)) # read seven
characters print(f.tell())
print(f.read())
print(f.tell())
f.seek(9,0) # moves to 9 position from begining
print(f.read(5))
f.seek(4, 1) # moves to 4 position from current location
print(f.read(5))
f.seek(-5, 2) # Go to the 5th byte before the
end print(f.read(5))
f.close()
File Modes and Opening position of file pointer
Standard Input/Output/Error
Most programs make output to "standard out“,input from "standard in“, and
error messages go to standard error).standard output is to monitor and
standard input is from keyboard.
e.g.program
import sys
a = sys.stdin.readline()
sys.stdout.write(a)
a = sys.stdin.read(5)#entered 10 characters.a contains 5 characters.
#The remaining characters are waiting to be read.
sys.stdout.write(a)
b=
sys.stdin.read(5)
sys.stdout.write(b)
sys.stderr.write("\ncustom error message")
Absolute Path & Relative Path:
Absolute path is the full address of any file or folder from the Drive i.e.
from ROOT FOLDER. It is like:
Drive_Name:\Folder\Folder…\filename
Relative Path is the location of file/folder from the current folder. To use
Relative path special symbols are:
Single Dot ( . ) : single dot ( . ) refers to current
folder. Double Dot ( .. ) : double dot ( .. ) refers to parent
folder
Backslash ( \ ) : first backslash before (.) and double dot( .. )refers to
ROOT folder.
If we don't know where the user executing the script from, it is best
to compute the absolute path on the user's system using os and fil__e.
__file__ is a global variable set on every Python script that returns the
relative path to the *.py file that contains it.
e.g.program import os
print(os.getcwd())
os.mkdir("newdir1")
os.chdir("newdir1")
print(os.getcwd())
my_absolute_dirpath = os.path.abspath(os.path.dirname( __file__))
print(my_absolute_dirpath)
Binary File Handling
f=open('myfile.bin','rb')
str1=f.read()
print(str1)
print(str1.decode())
f.close()
# program to search any data from file and display record number
import os
rec_size = 15
#finding the size of file
size=os.path.getsize('name.dat')
print('Size of file is:', size)
#finding the number of records
num_rec = int(size/rec_size)
print('Number of records: ', num_rec)
with open('name.dat','rb') as f:
n=input('Enter name to search:')
n=n.encode()
position=0
found=False
for i in range(num_rec):
f.seek(position)
str=f.read(15)
if n in str:
print('Found at record#',(i+1))
found = True
position+=rec_size
if not found:
print('name not found!!')
# program to update names(data) in Binary file
import os
rec_size = 15
#finding the size of file
size=os.path.getsize('name.dat')
print('Size of file is:', size)
#finding the number of records
num_rec = int(size/rec_size)
print('Number of records: ', num_rec)
with open('name.dat','r+b') as f:
old_name=input('Enter Name:')
old_name=old_name.encode()
new_name=input('Enter New Name:')
ln=len(new_name)
new_name=new_name+(15-ln)* ''
new_name=new_name.encode()
position=0
found=False
for i in range(num_rec):
f.seek(position)
str=f.read(15) #read each name
if old_name in str:
print('Updated Record Number',(i+1))
found=True
f.seek(-15,1) #sending cursor 15 byte back
f.write(new_name)
position+=rec_size
if not found:
print('Name not found!!')
#program to delete data in binary file
import os rec_size = 15
# finding size of file size=os.path.getsize('name.dat') print('Size of File :', size)
# finding Number of records
num_rec = int(size/rec_size)
print('Number of records:', num_rec) f1=open('name.dat','rb') f2=open('newname.dat','wb') n
nm=nm+(rec_size-l)* ' ' nm=nm.encode()
position=0
found=False
for i in range(num_rec): str=f1.read(rec_size) if(str!=nm):
f2.write(str) print('Record deleted!!') f1.close()
f2.close() os.remove('name.dat')
os.rename('newname.dat','name.dat')
Example:
binary_file=open("D:\\binary_file.dat",mode="wb+")
text="Hello 123"
encoded=text.encode("utf-8")
binary_file.write(encoded)
binary_file.seek(0)
binary_data=binary_file.read()
print("binary:",binary_data)
text=binary_data.decode("utf-8")
print("Decoded data:",text)
It is not very easy to use when we want to write several objects into the
binary file i.e. string, integer, a list or dictionary into the file. How would we
read the contents of this file later? Python has a module which does this
work for us and is extremely easy to use. This module is called pickle; it
provides us with the ability to serialize and deserialize objects, i.e., to
convert objects into bit streams which can be stored into files and later be
used to reconstruct the original objects.
Pickle.load() function is used to retrieve pickled data. The steps are quite
simple. We have to use pickle.load() function to do that.
The primary argument of pickle load function is the file object that you get
by opening the file in read-binary (rb) mode.
Example (Binary file R/W Operation)
import pickle
output_file = open("d:\\a.bin", "wb")
myint = 42
mystring = "Sample Text"
mylist = ["python", "sql", "mysql"]
mydict = { "name": "ABC", "job": "XYZ" }
pickle.dump(myint, output_file)
pickle.dump(mystring, output_file)
pickle.dump(mylist, output_file)
pickle.dump(mydict, output_file)
output_file.close()
input_file = open("d:\\a.bin", "rb")
myint = pickle.load(input_file)
mystring = pickle.load(input_file)
mylist = pickle.load(input_file)
mydict = pickle.load(input_file)
print("myint = " , myint)
print("mystring = " , mystring)
print("mylist = " , mylist)
print("mydict = " , mydict)
input_file.close()
import pickle
emp=[]
f=open('employee.dat','wb')
ans='y'
while ans=='y':
eno=int(input('Enter employee Number: '))
name=input('Enter Employee name: ')
salary=int(input('Enter Employee Salary: '))
emp.append([eno,name,salary])
ans=input('Add More records?')
pickle.dump(emp,f)
f.close()
import pickle
emp=[]
f=open('employee.dat','rb')
emp=pickle.load(f)
print('record of employee')
print(emp)
f.close()
f=open('employee.dat','wb')
found=False
en=int(input('enter employee number to
update')) for i in range(len(emp)):
if emp[i][0]==en:
sal=int(input('Enter new salary'))
emp[i][2]=sal
found=True
print('Record updated')
if found==False:
print('Not record found')
pickle.dump(emp,f)
f.close()
f=open('employee.dat','rb')
emp=pickle.load(f)
print('record of employee after updation')
print(emp)
f.close()
Example: Deleting Employee Record
import pickle
emp=[]
f=open('employee.dat','rb')
emp=pickle.load(f)
print('record of employee')
print(emp)
f.close()
f=open('employee.dat','wb')
en=int(input('enter employee number to
delete')) emp1=[]
for i in range(len(emp)):
if emp[i][0]!=en:
emp1.append(emp[i])
pickle.dump(emp1,f)
f.close()
f=open('employee.dat','rb')
emp=[]
emp=pickle.load(f)
print('record of employee after deletion')
print(emp)
f.close()
CSV File Handling
CSV is a simple file format used to store tabular data, such as a spread
sheet or database. CSV stands for "comma-separated values“.
Each line of the file is a data record. Each record consists of one or more
fields, separated by commas. The use of the comma as a field separator is
the source of the name for this file format.
Files in the CSV format can be imported to and exported from programs
that store data in tables, such as Microsoft Excel or Open Office Calc.
To perform read and write operation with CSV file, we need to import csv
module.
import csv
with open('csvt.csv') as csvfile:
myreader = csv.reader(csvfile,delimiter=',')
print("%10s"%"empno","%20s"%"emp name","%10s"%"salary")
print(" ===========================")
for row in myreader:
print("%10s"%row[0],"%10s"%row[1],"%10s"%row[2])
import csv
with open('csvt.csv', mode='a') as csvfile:
mywriter = csv.writer(csvfile,delimiter=',')
ans='y'
while ans.lower() =='y':
eno=int(input('Enter Emp number:'))
name=input('Enter Emp name:')
salary=int(input('Enter Emp Salary:'))
mywriter.writerow([eno,name,salary])
print('data saved…')
ans=input('Add More….')