Working With Files In Python
In this section, we will learn different methods to load a file into the program.
In the following example, we open a file (.txt format) that contains first paragraph of the book,Alice in the Wonderland. You can download the whole text here After opening, we will print its content:
# storing the file path in a variable
file_name = "alice_3p.txt"
# opening the file as file_object
with open(file_name) as file_object:
# saving the content of file
content = file_object.read()
# printing 'content'
print(content)
- first, we defined the path to the file and stored it in the variable
file_name
open()
function needs one argument: the name of the file we want to open. Theopen()
function returns an object representing the file. In our example,open(file_name)
returns an object representingalice_3p.txt
. Python stores this infile_object
, which we’ll work with later in the program- notice how we call
open()
in this program but notclose()
because the keywordwith
closes the file automatically once it is no longer needed - we used the
read()
method to read the entire contents of the file and store it as one long string in the variable,content
- when we
print
the value ofcontent
, we get the entire text file back:
Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do. Once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, "and what is the use of a book," thought Alice, "without pictures or
conversations?"
- Relative File Path: In the above example,
alice_3p.txt
file is present in the same folder from where this program is stored so we provided a relative file path — a relative file path tells Python to look for the specified file in a location relative to the directory where the currently running program file is stored. - Absolute File Path: We can also tell Python the exact location of the file iregardless of where the program that’s being executed is stored. This is called an absolute file path
We can use a
for
loop on the file_object
to examine each line from the file:# storing the file path in a variable
file_name = "alice_3p.txt"
# opening the file as file_object
with open(file_name) as file_object:
# using for loop on file_object
for line in file_object:
# printing each line
print(line)
Here is the output:
Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do. Once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, "and what is the use of a book," thought Alice, "without pictures or
conversations?"
These blank lines appear because an invisible newline character() is at the end of each line in the text file. We can use the
strip()
method to remove the blank linesIn the above example, we did use
for
loop to print each line in the file but what if we need this list of lines (content of file) outside the with
block? When we use with
, the file object returned by open()
is only available inside the with
block that contains it. If we want to access the file’s contents outside the with
block, we can store the content in a list
inside the with
block and then work with that list
later:file_name = 'material/chapter_10/pi_digits.txt'
with open(file_name) as file_object:
content_lines = file_object.readlines()
print(content_lines)
for content_line in content_lines:
print(content_line)
- Notice that we used the
readlines()
method to store the text lines as alist
as compared toread()
method, which stores the entire content as astring
. - secondly, we
print
thelist
as whole, inside thewith
block, ANDprint
each item inside thelist
using afor
loop outside thewith
block Here is the output:
['Alice was beginning to get very tired of sitting by her sister on the\n', 'bank, and of having nothing to do. Once or twice she had peeped into the\n', 'book her sister was reading, but it had no pictures or conversations in\n', 'it, "and what is the use of a book," thought Alice, "without pictures or\n', 'conversations?"']
Printing outside the `with` block:
Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do. Once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, "and what is the use of a book," thought Alice, "without pictures or
conversations?"
- now you can see why there is a blank line — the presence of new line character () at end of each line, except the last one.
NOTE: When Python reads from a text file, it interprets all text in the file as a string. Therefore, if our text file contains numerical data, we have to convert it to an integer using theint()
function or convert it to a float using thefloat()
function.
Let suppose that after we store each line of the text file inside a
list
using readlines()
method, we want to display the content in single line rather the line breaks included.---
# empty string to hold the value
single_line = ""
for content_line in content_lines:
# appending the lines, strip() to remove /n
single_line += f" {content_line.strip()}"
# print the end result
print(single_line)
Output would be:
Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do. Once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, "and what is the use of a book," thought Alice, "without pictures or conversations?"
we have used the strip() method to remove all the blank lines
In this example, we have used a file that contains the pi first 1 million digits after decimal place. To work with this in interesting manner, let’s write program to check whether someone birthday is within these 1 million digits.
# file path
file_name = "pi1000000.txt"
# opening file and saving its content
with open(file_name) as file_object:
lines = file_object.readlines()
# removing all spaces, new lines
pi_million = ''
for line in lines:
pi_million += line.strip()
# getting user input, birthdate
birthdate =input("Enter birthdate ddmmyy: ")
# checking if the birthdate inside pi_milliom
if birthday in pi_million:
print(f"Your birthdate, [{birthdate}] is within million digits of Pi")
else:
print("Alas, your birthdate is not within million digits of Pi ")
Enter birthdate ddmmyy: 101090
Your birthdate, [101090] is within million digits of Pi
Let suppose, we have text file that contains the topics that we have learned in Python (one topic on each line, ending with … in Python) We can use the
replace()
method to replace all instances of Python
with Py
.file_path = "python_los.txt"
with open(file_path) as file_object:
string_lines = file_object.readlines()
print(string_lines)
single_line_py = ''
for string_line in string_lines:
# replacing 'Python' with 'Py'
# using .replace method on string
single_line_py += string_line.replace('Python', 'Py')
print(single_line_py)
Output:
['List in Python\n', 'Dictionary in Python\n', 'Functions in Python\n', 'Classes in Python']
List in Py
Dictionary in Py
Functions in Py
Classes in Py
To write any text to a file, we need to useopen()
with a two arguments — the first argument is still the name of the file where we want to write and the second argument,w
tells Python that we want to open the file in write mode.
We can open a file in read moder
, write modew
, append modea
, or mode that allows to both read and write to the filer+
If we omit the mode argument, Python opens the file in read-only mode by default.
NOTE: Python write strings to a text file, by default. If we want to store numerical data in a text file, we will have to convert the data to numerical format first using the
int()
functionLet suppose we want to create a new file
welcome.txt
and store a single string, Welcome to all guests
The open()
function automatically creates the file we’re writing to if it doesn’t already exist.filename = "welcome.txt"
message = "Welcome to all guests"
# writing to file
with open(filename, 'w') as file_object:
# .write method on file_object
file_object.write(message)
# reading and printing the content of file
with open(filename) as file_object:
contents = file_object.read()
print(contents)
Welcome to all guests
We can
write()
as many lines as we wish. For example:filename = "welcome.txt"
message1 = "Welcome to all guests\n"
message2 = "Lunch will be at Lobby A on 3rd floor\n"
# writing to file
with open(filename, 'w') as file_object:
# .write method on file_object
file_object.write(message1)
file_object.write(message2)
# reading and printing the content of file
with open(filename) as file_object:
contents = file_object.read()
print(contents)
Welcome to all guests
Lunch will be at Lobby A on 3rd floor
When we open a file in append
a
mode, Python doesn’t erase the file before returning the file object. Therefore, all content we append will be added at the end of the file. Besides, just we studied above, if the file doesn’t exist, Python will create an empty file for us, before appending the content. Let’s append another line to the above file, welcome.txt
# string to append
message_append = "Please return to the lecture hall before 1300 hours"
# opening file in append mode
with open(filename, 'a') as file_object:
# appending the while with new content
file_object.write(message_append)
#reading and printing the content of file
with open(filename) as file_object:
contents = file_object.read()
print(contents)
Welcome to all guests
Lunch will be at Lobby A on 3rd floor
Please return to the lecture hall before 1300 hours
In the following section we will work with
json
module. To read more about the json data structure, please visit this linkIn Python, we store data using
json.dump()
, and then load the dat into program using json.load()
The
json.dump()
function takes two arguments: a piece of data to store and a location where to store the data. Here is an example:# importing json module
import json
# data from user input
username = input("Please enter desired username: ")
# where to store the data
filename = 'username.json'
# anatomy of saving the json data
with open(filename, 'w') as file_object:
json.dump(username, file_object)
print(f"Following username has been stored: {username}")
Please enter desired username: dexter
Following username has been stored: dexter
- we first
import
thejson
module, to make the program work with json data type - then we ask the user to provide the username and store it inside the variable
username
- then we provide the location of file path to store the data,
filename
- then we open the file in write mode
w
and store it insidefile_object
- then using
json.dump()
function we store the data in the file. The first argument is location to store the data and second argument is data itself
We use the
json.load()
to load the data stored inside given file back into programfilename = 'username.json'
# anatomy of loading the json data
with open(filename) as file_object:
username = json.load(file_object)
print("Welcome back " + username)
Welcome back dexter
Last modified 4mo ago