Unit 6File processingSpecial thanks to Roy McElmurry, John Kurkowski, Scott Shawcroft, Ryan Tucker, Paul Beck for their work.Except where otherwise noted, this work is licensed under:http://creativecommons.org/licenses/by-nc-sa/3.02Reading Filesname = open("filename")– opens the given file for reading, and returns a file objectname.read() -file's entire contents as a stringname.readline() -next line from file as a string name.readlines() -file's contents as a list of lines– the lines from a file object can also be read using a for loop>>> f = open("hours.txt")>>> f.read()'123 Susan 12.5 8.1 7.6 3.2\n456 Brad 4.0 11.6 6.5 2.7 12\n789 Jenn 8.0 8.0 8.0 8.0 7.5\n'3File Input Template• A template for reading files in Python:name = open("filename")for line in name:statements>>> input = open("hours.txt")>>> for line in input:... print(line.strip()) # strip() removes \n123 Susan 12.5 8.1 7.6 3.2456 Brad 4.0 11.6 6.5 2.7 12789 Jenn 8.0 8.0 8.0 8.0 7.54Exercise• Write a function input_stats that accepts a file name as a parameter and that reports the longest line in the file.– example input file, carroll.txt:Beware the Jabberwock, my son,the jaws that bite, the claws that catch,Beware the JubJub bird and shunthe frumious bandersnatch.– expected output:>>> input_stats("carroll.txt")longest line = 42 charactersthe jaws that bite, the claws that catch,5Exercise Solutiondef input_stats(filename):input = open(filename)longest = ""for line in input:if len(line) > len(longest):longest = lineprint("Longest line =", len(longest))print(longest)6Recall: String Methods>>> name = "Martin Douglas Stepp">>> name.upper()'MARTIN DOUGLAS STEPP'>>> name.lower().startswith("martin")True>>> len(name)20ord, chrstriptrimupper, lower,isupper, islower,capitalize, swapcasetoLowerCase, toUpperCaselen(str)lengthfindindexOfstartswith, endswithstartsWith, endsWithPythonJava7String Splitting• split breaks a string into tokens that you can loop over.name.split() # break by whitespacename.split(delimiter) # break by delimiter• join performs the opposite of a splitdelimiter.join(list of tokens)>>> name = "Brave Sir Robin">>> for word in name.split():... print(word)BraveSirRobin>>> "LL".join(name.split("r"))'BLLave SiLL Robin8Splitting into Variables• If you know the number of tokens, you can split them directly into a sequence of variables.var1, var2, ..., varN = string.split()• may want to convert type of some tokens: type(value)>>> s = "Jessica 31 647.28">>> name, age, money = s.split()>>> name'Jessica'>>> int(age)31>>> float(money)647.289Exercise• Suppose we have this hours.txt data:123 Suzy 9.5 8.1 7.6 3.1 3.2456 Brad 7.0 9.6 6.5 4.9 8.8789 Jenn 8.0 8.0 8.0 8.0 7.5• Compute each worker's total hours and hours/day.– Assume each worker works exactly five days.Suzy ID 123 worked 31.4 hours: 6.3 / dayBrad ID 456 worked 36.8 hours: 7.36 / dayJenn ID 789 worked 39.5 hours: 7.9 / day10Exercise Answerinput = open("hours.txt")for line in input:id, name, mon, tue, wed, thu, fri = line.split()# cumulative sum of this employee's hourshours = float(mon) + float(tue) + float(wed) + \float(thu) + float(fri)print(name, "ID", id, "worked", \hours, "hours: ", hours/5, "/ day"12345678910hours.py11Writing Filesname = open("filename", "w")name = open("filename", "a")– opens file for write (deletes previous contents), or– opens file for append (new data goes after previous data)name.write(str) -writes the given string to the filename.close() -saves file once writing is done>>> out = open("output.txt", "w")>>> out.write("Hello, world!\n")>>> out.write("How are you?")>>> out.close()>>> open("output.txt").read()'Hello, world!\nHow are you?'12Exercise• Write code to read a file of gas prices in USA and Belgium:8.20 3.81 3/21/118.08 3.84 3/28/118.38 3.92 4/4/11...• Output the average gas price for each country to an output file named
View Full Document