Overview
When you’re working with Python, you don’t need to import a library in order to read and write to a file. It’s handled natively in the language, albeit in a unique manner. Below, we outline the simple steps to read and write to a file in Python.
The first thing you’ll need to do is use the built-in python open file function to get a file object.
The open function opens a file. It’s simple. This is the first step in reading and writing files in python.
When you use the open function, it returns something called a file object. File objects contain methods and attributes that can be used to collect information about the file you opened. They can also be used to manipulate said file.
For example, the mode attribute of a file object tells you which mode a file was opened in. And the name attribute tells you the name of the file.
You must understand that a file and file object are two wholly separate – yet related – things.
File Types
What you may know as a file is slightly different in Python.
In Windows, for example, a file can be any item manipulated, edited or created by the user/OS. That means files can be images, text documents, executables, and excel file and much more. Most files are organized by keeping them in individual folders.
A file In Python is categorized as either text or binary, and the difference between the two file types is important.
Text files are structured as a sequence of lines, where each line includes a sequence of characters. This is what you know as code or syntax.
Each line is terminated with a special character, called the EOL or End of Line character. There are several types, but the most common is the comma {,} or newline character. It ends the current line and tells the interpreter a new one has begun.
A backslash character can also be used, and it tells the interpreter that the next character – following the slash – should be treated as a new line. This character is useful when you don’t want to start a new line in the text itself but in the code.
A binary file is any type of file that is not a text file. Because of their nature, binary files can only be processed by an application that know or understand the file’s structure. In other words, they must be applications that can read and interpret binary.
Reading Files in Python
In Python, files are read using the open() method. This is one of Python’s built-in methods, made for opening files.
The open() function takes two arguments: a filename and a file opening mode. The filename points to the path of the file on your computer, while the file opening mode is used to tell the open() function how we plan to interact with the file.
By default, the file opening mode is set to read-only, meaning we’ll only have permission to open and examine the contents of the file.
On my computer is a folder called PythonForBeginners. In that folder are three files. One is a text file named emily_dickinson.txt, and the other two are python files: read.py and write.py.
The text file contains the following poem, written by poet Emily Dickinson. Perhaps we are working on a poetry program and have our poems stored as files on the computer.
Success is counted sweetest
By those who ne’er succeed.
To comprehend a nectar
Requires sorest need.
Not one of all the Purple Host
Who took the Flag today
Can tell the definition
So clear of Victory
As he defeated, dying
On whose forbidden ear
The distant strains of triumph
Burst agonized and clear.
Before we can do anything with the contents of the poem file, we’ll need to tell Python to open it. The file read.py, contains all the python code necessary to read the poem.
Any text editor can be used to write the code. I’m using the Atom code editor, which is my editor of choice for working in python.
# read.py
# loading a file with open()
myfile = open(“emily_dickinson.txt”)
# reading each line of the file and printing to the console
for line in myfile:
print(line)
I’ve used Python comments to explain each step in the code. Follow this link to learn more about what a Python comment is.
The example above illustrates how using a simple loop in Python can read the contents of a file.
When it comes to reading files, Python takes care of the heaving lifting behind the scenes. Run the script by navigating to the file using the Command Prompt — or Terminal — and typing ‘python’ followed by the name of the file.
Windows Users: Before you can use the python keyword in your Command Prompt, you’ll need to set up the environment variables. This should have happened automatically when you installed Python, but in case it didn’t, you may need to do it manually.
>python read.py
Data provided by the open() method is usually stored in a new variable. In this example, the contents of the poem are stored in the variable “myfile.”
Once the file is created, we can use a for loop to read every line in the file and print its contents to the command line.
This is a very simple example of how to open a file in Python, but student’s should be aware that the open() method is quite powerful. For some projects it will be the only thing needed to read and write files with Python.
Writing Files in Python
Before we can write to a file in Python, it must first be opened in a different file opening mode. We can do this by supplying the open() method with a special argument.
In Python, write to file using the open() method. You’ll need to pass both a filename and a special character that tells Python we intend to write to the file.
Add the following code to write.py. We’ll tell Python to look for a file named “sample.txt” and overwrite its contents with a new message.
# open the file in write mode
myfile = open(“sample.txt”,’w’)
myfile.write(“Hello from Python!”)
Passing ‘w’ to the open() method tells Python to open the file in write mode. In this mode, any data already in the file is lost when the new data is written.
If the file doesn’t exist, Python will create a new file. In this case, a new file named “sample.txt” will be created when the program runs.
Run the program using the Command Prompt:
>python write.py
Python can also write multiple lines to a file. The easiest way to do this is with the writelines() method.
# open the file in write mode
myfile = open(“sample.txt”,’w’)
myfile.writelines(“Hello World!”,”We’re learning Python!”)
# close the file
myfile.close()
We can also write multiple lines to a file using special characters:
# open the file in write mode
myfile = open("poem.txt", 'w')
line1 = "Roses are red.\n"
line2 = "Violets are blue.\n"
line3 = "Python is great.\n"
line4 = "And so are you.\n"
myfile.write(line1 + line2 + line3 + line4)
Using string concatenation makes it possible for Python to save text data in a variety of ways.
However, if we wanted to avoid overwriting the data in a file, and instead append it or change it, we’d have to open the file using another file opening mode.
File Opening Modes
By default, Python will open the file in read-only mode. If we want to do anything other than just read a file, we’ll need to manually tell Python what we intend to do with it.
- ‘r’ – Read Mode: This is the default mode for open(). The file is opened and a pointer is positioned at the beginning of the file’s content.
- ‘w’ – Write Mode: Using this mode will overwrite any existing content in a file. If the given file does not exist, a new one will be created.
- ‘r+’ – Read/Write Mode: Use this mode if you need to simultaneously read and write to a file.
- ‘a’ – Append Mode: With this mode the user can append the data without overwriting any already existing data in the file.
- ‘a+’ – Append and Read Mode: In this mode you can read and append the data without overwriting the original file.
- ‘x’ – Exclusive Creating Mode: This mode is for the sole purpose of creating new files. Use this mode if you know the file to be written doesn’t exist beforehand.
Note: These examples assume the user is working with text file types. If the intention is to read or write to a binary file type, an additional argument must be passed to the open() method: the ‘b’ character.
# binary files need a special argument: ‘b’
binary_file = open(“song_data.mp3”,’rb’)
song_data = binary_file.read()
# close the file
binary_file.close()
Closing Files with Python
After opening a file in Python, it’s important to close it after you’re done with it. Closing a file ensures that the program can no longer access its contents.
Close a file with the close() method.
# open a file
myfile = open(“poem.txt”)
# an array to store the contents of the file
lines = []
For line in myfile:
lines.append(line)
# close the file
myfile.close()
For line in liens:
print(line)
Opening Other File Types
The open() method can read and write many different file types. We’ve seen how to open binary files and text files. Python can also open images, allowing you to view and edit their pixel data.
Before Python can open an image file, the Pillow library (Python Imaging Library) must be installed. It’s easiest to install this module using pip.
pip install Pillow
With Pillow installed, Python can open image files and read their contents.
From PIL import Image
# tell Pillow to open the image file
img = Image.open(“your_image_file.jpg”)
img.show()
img.close()
The Pillow library includes powerful tools for editing images. This has made it one of the most popular Python libraries.
With Statement
You can also work with file objects using the with statement. It is designed to provide much cleaner syntax and exceptions handling when you are working with code. That explains why it’s good practice to use the with statement where applicable.
One bonus of using this method is that any files opened will be closed automatically after you are done. This leaves less to worry about during cleanup.
To use the with statement to open a file:
with open(“filename”) as file:
Now that you understand how to call this statement, let’s take a look at a few examples.
with open(“poem.txt”) as file:
data = file.read()
do something with data
You can also call upon other methods while using this statement. For instance, you can do something like loop over a file object:
with open(“poem.txt”) as f:
for line in f:
print line,
You’ll also notice that in the above example we didn’t use the “file.close()” method because the with statement will automatically call that for us upon execution. It really makes things a lot easier, doesn’t it?
Splitting Lines in a Text File
As a final example, let’s explore a unique function that allows you to split the lines taken from a text file. What this is designed to do, is split the string contained in variable data whenever the interpreter encounters a space character.
But just because we are going to use it to split lines after a space character, doesn’t mean that’s the only way. You can actually split your text using any character you wish – such as a colon, for instance.
The code to do this (also using a with statement) is:
with open(“hello.text”, “r”) as f:
data = f.readlines()
for line in data:
words = line.split()
print words
If you wanted to use a colon instead of a space to split your text, you would simply change line.split() to line.split(“:”).
The output for this will be:
[“hello”, “world”, “how”, “are”, “you”, “today?”]
[“today”, “is”, “Saturday”]
The reason the words are presented in this manner is because they are stored – and returned – as an array. Be sure to remember this when working with the split function.
Conclusion
Reading and writing files in Python involves an understanding of the open() method. By taking advantage of this method’s versatility, it’s possible to read, write, and create files in Python.
Files Python can either be text files or binary files. It’s also possible to open and edit image data using the Pillow module.
Once a file’s data is loaded in Python, there’s virtually no end to what can be done with it. Programmers often work with a large number of files, using programs to generate them automatically.
As with any lesson, there is only so much that can be covered in the space provided. Hopefully you’ve learned enough to get started reading and writing files in Python.
More Reading
Official Python Documentation – Reading and Writing Files
Python File Handling Cheat Sheet
Recommended Python Training
Course: Python 3 For Beginners
Over 15 hours of video content with guided instruction for beginners. Learn how to create real world applications and master the basics.