24
Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Embed Size (px)

Citation preview

Page 1: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Guide to Programming with Python

Chapter SevenFiles and Exceptions: The Trivia Challenge

Game

Page 2: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Objectives So far we know how to get user’s input using

raw_input(), and print out to the screen using print statements!

Now we are going to learn how to use files– Read from text files– Write to text files (permanent storage)– Need to open a file before using it, and close it when it is done

Read and write more complex data with files using cPickle module (optional!)

Intercept and handle errors during a program’s execution

Guide to Programming with Python 2

Page 3: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

We are Talking about Plain Text Files

Plain text file: File made up of only ASCII characters

Easy to read strings from plain text files Text files good choice for simple information

– Easy to edit– Cross-platform– Human readable!

Guide to Programming with Python 3

Page 4: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Opening and Closing a Text File

text_file = open("read_it.txt", "r")

text_file.close()

Must open before read (or write); then you read from and/or write to the file by referring to the file object

Always close file when done reading or writing Can open a file for reading, writing, or both

Guide to Programming with Python 4

1st argument: filename

2nd argument: access mode

File object

Page 5: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

File Access Modes

Files can be opened for reading, writing, or both.

Guide to Programming with Python 5

Page 6: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Reading from a Text Fileoneletter = text_file.read(1) #read one characterfiveletter = text_file.read(5)#read 5 characterswhole_thing = text_file.read()#read the entire file

read() file object method – Argument: number of characters to be read; if not

given, get the entire file– Return value: string

Each read() begins where the last ended At end of file, read() returns empty string

Guide to Programming with Python 6

Page 7: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Reading a Line from a File

text_file = open("read_it.txt", "r")

line1 = text_file.readline()line2 = text_file.readline()line3 = text_file.readline()

readline() file object method– Returns the entire line if no value passed– Once read all of the characters of a line (including

the newline), next line becomes current line

text_file.readline(number_of_characters) # a little confusing

Guide to Programming with Python 7

Page 8: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Reading All Lines into a List

text_file = open("read_it.txt", "r")

lines = text_file.readlines()

#lines is a list!

readlines() file object method– Reads text file into a list– Returns list of strings– Each line of file becomes a string element in list

Compared to: read(), which reads the entire file into a string (instead of a list of strings)

Guide to Programming with Python 8

Page 9: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Looping Through a Text File

>>> text_file = open("read_it.txt", "r")

>>> for line in text_file:

print line

Line 1

This is line 2

That makes this line 3

Can iterate over open text file, one line at a time

Guide to Programming with Python 9

Page 10: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Two More Useful String’s Methodse.g., read_it.txt:

Hunter 98 good

Nathan 67 bad

#The following lines for reading names and scores:

text_file = open("read_it.txt", "r")

for line in text_file:

line = line.strip()

(name, score) = line.split()

str.split([sep[, maxsplit]]) -- Return a list of the words in the string, using sep as the delimiter string. If sep is not specified or None, any whitespace string is a separator '1<>2<>3'.split('<>') returns ['1', '2', '3'])

str.strip([chars]) -- Return a copy of the string with the leading and trailing characters removed' spacious '.strip() returns 'spacious'

10

Page 11: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Writing (a List of) Strings to a Text File

text_file = open("write_it.txt", "w")

text_file.write("Line 1\n")

text_file.write("This is line 2\n")

text_file.write("That makes this line 3\n”)

write() file object method writes new characters to file open for writing

text_file = open("write_it.txt", "w")

lines = ["Line 1\n", "This is line 2\n", "That makes this line 3\n"]

text_file.writelines(lines)

writelines() file object method writes list of strings to a file

Guide to Programming with Python 11

Page 12: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Pickling/Unpickling Data to/from a File (Optional!) Pickling: Storing complex objects (e.g., lists, dictionaries) in files

cPickle module to pickle and store more complex data in a file

#pickle & write to fileimport cPicklevariety = ["sweet", "hot", "dill"]pickle_file = open("pickles1.dat", "w")cPickle.dump(variety, pickle_file)

#unpickle and read from a file

pickle_file = open("pickles1.dat", "r")

variety = cPickle.load(pickle_file)

print variety

Guide to Programming with Python 12

Page 13: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Using a Shelf to Store/Get Pickled Data (Optional!)

shelf: An object written to a file that acts like a dictionary, providing random access to a group of objects (pickled)

import shelve

pickles = shelve.open("pickles2.dat”)

pickles["variety"] = ["sweet", "hot", "dill"]

pickles.sync()

#sync() shelf method forces changes to be written to file

for key in pickles.keys()

print key, "-", pickles[key]

#Shelf acts like a dictionary--Can retrieve pickled objects through key

13

Page 14: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Handling Exceptions >>> 1/0

Traceback (most recent call last): File "<pyshell#0>", line 1, in -toplevel- 1/0ZeroDivisionError: integer division or modulo by

zero

Exception: An error that occurs during the execution of a program

Exception is raised and can be caught (or trapped) then handled

Unhandled, halts program and error message displayed

Guide to Programming with Python 14

Page 15: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Using a try Statement with an except Clause

try:

num = float(raw_input("Enter a number: "))

except:

print "Something went wrong!"

try statement sections off code that could raise exception

Instead of raising exception, except block run If no exception raised, except block skipped

Guide to Programming with Python 15

Page 16: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Specifying an Exception Type

try:

num = float(raw_input("\nEnter a number: "))

except(ValueError):

print "That was not a number!“

Different types of errors raise different types of exceptions

except clause can specify exception types to handle Attempt to convert "Hi!" to float raises ValueError

exception Good programming practice to specify exception types

to handle each individual case Avoid general, catch-all exception handling

Guide to Programming with Python 16

Page 17: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Selected Exception Types

Table 7.5: Selected exception types

Guide to Programming with Python 17

Page 18: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Handling Multiple Exception Types

for value in (None, "Hi!"):

try:

print "Attempting to convert", value, "–>",

print float(value)

except(TypeError, ValueError):

print "Something went wrong!“

Can trap for multiple exception types Can list different exception types in a single except

clause Code will catch either TypeError or ValueError

exceptions

Guide to Programming with Python 18

Page 19: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Handling Multiple Exception Types (continued)

for value in (None, "Hi!"): try: print "Attempting to convert", value, "–>", print float(value) except(TypeError): print "Can only convert string or number!" except(ValueError): print "Can only convert a string of digits!“ Another method to trap for multiple exception types

is multiple except clauses after single try Each except clause can offer specific code for each

individual exception type

Guide to Programming with Python 19

Page 20: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Getting an Exception’s Argument

try:

num = float(raw_input("\nEnter a number: "))

except(ValueError), e:

print "Not a number! Or as Python would say\n", e

Exception may have an argument, usually message describing exception

Get the argument if a variable is listed before the colon in except statement

Guide to Programming with Python 20

Page 21: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Adding an else Clause

try:

num = float(raw_input("\nEnter a number: "))

except(ValueError):

print "That was not a number!"

else:

print "You entered the number", num

Can add single else clause after all except clauses else block executes only if no exception is raised num printed only if assignment statement in the try

block raises no exception

Guide to Programming with Python 21handle_it.py

Page 22: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Summary (Files) How do you open a file?

file = open(file_name, mode)

How do you close a file?file.close()

How do you read all the characters from a line in a file?the_string = file.readline()

How do you read all the lines from a file into a list?the_list = file.readlines()

How do you loop through a file?for aline in file:

How do you write text to a file?file.write(the_text)

How do you write a list of strings to a file?file.writelines(the_list)

Guide to Programming with Python 22

Page 23: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Summary (Exceptions)

What is an exception (in Python)?– an error that occurs during the execution of a program

How do you section off code that could raise an exception (and provide code to be run in case of an exception)?– try / except(SpecificException) / else

If an exception has an argument, what does it usually contain?– a message describing the exception

Within a try block, how can you execute code if no exception is raised?– else:

Guide to Programming with Python 23

Page 24: Guide to Programming with Python Chapter Seven Files and Exceptions: The Trivia Challenge Game

Using Modules: os & sys The ‘os’ module provides functions for interacting

with the operating system– Ref:

http://www.network-theory.co.uk/docs/pytut/OperatingSystemInterface.html

– http://docs.python.org/library/os.html– os.getcwd() # Return the current working directory– os.chdir() #change the working directory– os.path.exists('/usr/local/bin/python')– os.path.isfile(‘test.txt’)– os.listdir(os.getcwd()) #get a list of the file in current directory

The ‘sys’ module: System-specific parameters and functions – Ref: http://docs.python.org/library/sys.html– sys.argv #The list of command line arguments passed to a Python script

– sys.exit([arg]) #exit from python24