Reading and Writing Files In Python
This tutorial was written using Python 3.6
Being able to effectively work with the filesystem in any programming language is important as there will always be a need to do things such as import data from files or store data in local files. In this tutorial we’ll be looking at how you can create files, write to these newly created and then subsequently delete these files once we are done.
Creating Files
There are multiple ways to create files in Python, but arguably the cleanest way
to do this is by using the with
keyword like so:
Context Manager Approach
def main():
with open('test.txt', 'w') as file:
file.write("THIS IS A TEST FILE")
if __name__ == '__main__':
main()
What this does is open a file named test.txt
in a context manager and returns
this new file object to us as file
. Within the bounds of this context manager
we then call file.write("THIS IS A TEST FILE")
which subsequently writes
THIS IS A TEST FILE
to our newly created file. Upon exiting our with
statement the program then handles closing the file for us and we don’t have to
worry about anything else.
Without a Context Manager
However should you wish to do this in a manner that doesn’t use a context manager then you can do something like so:
file = open('test2.txt', 'w')
file.write("This is a second test")
file.close()
The above code creates a new file called test2.txt
, it then appends
This is a second test
to that file before closing the file by calling
file.close()
. It’s important to note that by going down this route we have to
handle the closing of these files ourself. Forgetting to do this can lead to
complications such as:
- It can impact the performance of your program.
- Some of the changes you make to files in Python may not actually be written to
the file until after the call to
.close()
is made. - If you are dealing with thousands of files then you may hit limits as to how many files can be open on your machine.
More importantly, it’s considered bad practice.
Writing to a File
In the previous two examples you’ll notice that we called the open()
function
with 'w'
as our second parameter.
Different Modes
When it comes to working with files in Python, it’s important to bear in mind
that there are different modes
that you can open a file with. This allows you
to have more fine-grained control when you are working with files.
Mode | Description |
---|---|
r | The r or read mode is used when you wish to only read from that particular file. |
w | The w or write mode is the mode you should use when you wish to overwrite the file with new information. |
a | The a or append mode is mode you should use when you wish to append information to a file. |
r+ | The r+ or read-write mode is used when you wish to do both reading and writing from a file. |
Ensuring you have used the correct mode when opening files can potentially save
you quite a bit of debugging time. In the past I have found myself scratching my
head wondering why the w
mode is overwriting all of my file’s content when I
should indeed have used the a
mode.
Reading a File Line-by-Line
It’s not an uncommon use-case to want to iterate over a file in a line-by-line fashion and process each line as it comes in. When you open a file you can actually use it as an iterator and iterate over it in the same manner that you would with normal iterators in Python.
Let’s take for example a text file called test3.txt
that contains the
following:
Line 1 - THIS IS A TEST FILE
Line 2
Line 3 - OMG THIS WORKS
If we wished to iterate over this in a line-by-line fashion we could do something like so:
with open('test.txt', 'r') as file:
for line in file:
print(line)
This would then print out the following when we ran this program:
Line 1 - THIS IS A TEST FILE
Line 2
Line 3 - OMG THIS WORKS