260 likes | 274 Views
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
E N D
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
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
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 File object 1st argument: filename 2nd argument: access mode Guide to Programming with Python
File Access Modes Files can be opened for reading, writing, or both. Guide to Programming with Python
Reading from a Text File oneletter = text_file.read(1) #read one character fiveletter = text_file.read(5)#read 5 characters whole_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
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
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
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
Two More Useful String’s Methods e.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'
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
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 file import cPickle variety = ["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
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
Handling Exceptions >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in -toplevel- 1/0 ZeroDivisionError: 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
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
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 • exceptclause can specify exception types to handle • Attempt to convert "Hi!"to float raises ValueErrorexception • Good programming practice to specify exception types to handle each individual case • Avoid general, catch-all exception handling Guide to Programming with Python
Selected Exception Types Table 7.5: Selected exception types Guide to Programming with Python
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 singleexceptclause • Code will catch either TypeErrororValueErrorexceptions Guide to Programming with Python
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 exceptclauses after single try • Eachexceptclause can offer specific code for each individual exception type Guide to Programming with Python
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
handle_it.py 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
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
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
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 python
Web crawler • urllib • urlretrieve(url[, filename[, reporthook[, data]]]) • urllib.urlretrieve(“http://www.google.com”, “google.html”) Guide to Programming with Python