Python For GCSE
File Handling

To make things easier for yourself when working with files, place the text file that you want to read in the same folder as the Python program that needs to read it.

Making The Connection

The first thing we need to do to work with a file is to open it.

f = open("myfile.txt", "r")
# do things with the file
f.close()

The 'r' in this example means to open the file in read mode. This would prevent us from making any changes to the contents of the file. When we open a file, we have the following options for the mode,

  • r - read only
  • w - write
  • a - append
  • r+ - read and write

When we finish working with a file, we must make sure to close it.

Reading

We have two ways to read from a file.
f = open("myfile.txt", "r")

# read the entire file
a = f.read()
print(a)

f.close()

The other option is,

f = open("myfile.txt", "r")

# read the file a line at a time
for line in f:
    print(line)

f.close()

The second option is often the one that is more useful to us. We can process the lines we read from the file as we read them. The problem we get is that the linebreaks are read alongside the data. The two methods shown above produce slightly different output.

Reading Lines Into A List

One approach I like is to use a function to read the whole file into a list. I then remove the line breaks. This leaves with me a list of the lines in the file that I can work with easily in the program.

def read_file(f):
    # open the file
    thefile = open(f,"r")
    # read the whole file into the list
    rows = [line for line in thefile]
    # close the file
    thefile.close()
    # remove the line break at the end of each list item
    for i,r in enumerate(rows):
        rows[i] = r.replace("\n","")
    return rows

data = read_file("myfile.txt")
print(data)

Writing To The File

Writing to the file is pretty easy if you have opened the file in the correct mode. You have to think about where you want to put line breaks.

f = open("myfile.txt", "w")

f.write("Things to write to the file.")

f.write("and a line break\n")

f.close()