So far we have taken input from the keyboard and given output to the
screen. However, You may want to save the results of a calculation for
later use or read in data from a file for Python to manipulate. You give
Python access to a file by
>>> fout = open("results.dat", "w")
fout is then a variable like the integers, floats and arrays we
have been using so far--
fout is a conventional name for an
output file variable, but you are free to choose something more
open function takes two parameters. First a
string that is the name of the file to be accessed, and second a
mode. The possible modes are as follows:
||The file is opened for reading|
||The file is opened for writing, and any file with the same name is erased--be careful!|
||The file is opened for appending--data written to it is added on at the end|
There are various ways of reading data in from a file. For example, the
readline() method returns the first line the first time it
is called, and then the second line the second time it is called, and so
on, until the end of the file is reached when it returns an empty string:
>>> fin = open("input.dat", "r") >>> fin.readline() '10\n' >>> fin.readline() '20\n' >>> fin.readline() ''
\n characters are newline characters.)
Note the parentheses are required. If they are not included the file
will not be read. They are to tell Python that you are using the
readline() function--a function is always followed by
parentheses, whether it takes any arguments or not.
You can see from the example that you tell Python to use methods by adding a full stop followed by the name of the method to the variable name of the file. This syntax may seem strange3.13 but for now just use the examples below as your guide to the syntax, and don't worry about what it means.
The contents are read in as a string but if the data is numeric you need to coerce them into either floats or integers before they are used in calculations:
>>> fin = open("input.dat", "r") >>> x = fin.readline() >>> type(x) <type 'str'> >>> y = float(x) >>> type(y) <type 'float'> >>> print y 10.0
You can also use the
readlines() method (note the plural) to
read in all the lines in a file in one go, returning a list:
>>> fin.readlines() ['This is the first line of the file.\n', 'Second line of the file\n']
To output or write to a file use the
write() method. It takes one
parameter--the string to be written. If you want to start a new line
after writing the data, add a
\n character to the end:
>>> fout = open("output.dat", "w") >>> fout.write("This is a test\n") >>> fout.write("And here is another line\n") >>> fout.close()
Note that in order to commit changes to a file, you must
files as above.
write() must be given a string to write. Attempts to write
integers, floats or arrays will fail:
>>> fout = open("output.dat", "w") >>> fout.write(10) Traceback (most recent call last): File "<pyshell#65>", line 1, in ? fout.write(10) TypeError: argument 1 must be string or read-only character buffer, not int
You must coerce numbers into strings using the
>>> x = 4.1 >>> print x 4.1 >>> str(x) '4.1'
If you are trying to produce a table then you may find the
t character useful. It inserts a tab character,
which will move the cursor forward to the next tabstop3.14. It is an example of a
non-printed character. It leaves only white space--no characters
are printed as such. However, it is still a string character, and must be
enclosed in quotes. For example, to print the variables
b separated by a tab you would type:
print a + "\t" + b
This is not a perfect method of producing a table. If you are interested in the ``right way'' of doing this, then ask a demonstrator about formatted output.
Recreate the one hundred element arrays of and you created in Exercise 3.10. Print these arrays out to a file in the form of a table. The first line of the table should contain the first element of both arrays, the second line the second element, an so on. Keep the file as we will use it later.