Open main menu

CDOT Wiki β

Changes

OPS435 Python Lab 5

1,065 bytes added, 09:26, 21 January 2020
no edit summary
<font color='red'>
'''** DO NOT USE - TO BE UPDATED FOR CENTOS 8.0 **'''
</font>
= LAB OBJECTIVES =
:So far, you have created Python scripts to prompt a user to input data from the keyboard. When creating Python scripts, you may also need to be able to process large volumes of information, or store processed data for further processing. The first investigation in this lab will focus on file management, opening files, saving data to files, and reading files.
:'''NOTE:''' Since many tasks that system administrators perform deal with files, this is a crucial skill to understand.
 :It is very important to provide logic in your Python is an script in case it '''object oriented programming languageencounters an error'''. Object oriented programming languages have great advantages An example would be an invalid path-name or other programming languages. Some advantages include greater modularity for '''more effective troubleshooting''', the ability trying to '''re-use''' objects, and to provide '''greater flexibility''' to allow objects to handle unique situations from various data (for example close a date in different formats)file that is already closed. The second investigation in this lab will introduce look into how the student Python interpreter '''handle errors''' (commonly referred to basic object oriented programming. To keep things simpleas "exception handling") at run time, this investigation will focus more on the concept that objects are primarily used and learn how to store data and write Python codethat will run gracefully even when problems occur during program execution.
== PYTHON REFERENCE ==
:In previous labs, you have been advised to make notes and use online references. This also relates to working with files and learning about objected oriented programming to help becoming . You may be "overwhelmed" with the volume of information involved in this lab.
:Below is a table with links to useful online Python reference sites (by category). You may find these references useful when performing assignments, etc.
== PART 1 - Reading Data From Files ==
:'''Perform the Following Steps:'''
:#Launch your Centos VM, open a shell terminal (as a regular user) and start Create a new ipython3 session:<source lang="python">ipython3</source>file for testing.:#Create a new text file in the '''lab5''' directory:<source lang="pythonbash">%cd ~/ops435/lab5%vim ~/ops435/lab5/data.txt
</source>
:#Place the following content inside the new text file and save it:<source lang="python">
Hello World
This is the second linerline
Third line
Last line
</source><br>In order to read data from a text file, we need to create a special storage area (or a '''"buffer"''') an object that will be used to access and storage the data in a file. This special storage has different names for various In some programming languages (like C) this is called a file descriptor, or a '''"file pointer"''' in the C programming language or as an '''"object"''' in object oriented programming languages).<br>In Python, we define an '''objectit''' to act as a buffer to help access the data contained within the file. To simplify things for now, you can think of s an '''object''' as a '''special variable'''. You will learn more about object oriented programming later in this lab.<br><br>:#Now lets write some python code from the ipython3 prompt to open this created file for reading. We will define and object called '''"f"''' in order to act as a buffer to help retrieve content from our text file. Issue the following:<source lang="python">
f = open('data.txt', 'r')
</source><br>The '''open()''' function takes two string arguments: a path to a file, and a mode option (to ask for reading, writing, appending, etc). The ''open()'' function will return a special file object to us, this file object will allow us to read the lines inside the file.<br><br>:#You may recall that we used Here are the '''dir()''' function to display library information most useful functions for our Python library (eg. '''dir(sys)''' ). This function can also display other elements such as attributes and methods for an object. Issue the followingtext file manipulation:<source lang="python">dirf.read() # read all lines and stores in a stringf.readlines() # read all lines and stores in a listf.readline() # read first line, if run a second time it will read the second line, then thirdf.close() # close the opened file
</source>
:#Although the '''dir(f)''' function displays a lot of information, we will focus on only a few elements. Separately issue the following commands in order to inspect some of the '''functions'''. '''attributes''' and '''methods''' that we can use with this file object:<source lang="python">help(f.read) # help for reading all lines and stores in a stringhelp(f.readlines) # help for reading all lines and stores in a listhelp(f.readline) # help for reading first line, if run a second time it will read the second line, then thirdhelp(f.writable) # help for determining if a file is writablehelp(f.close) # help for closing the opened filef.writable() # Object method (confirm if file is writable)f.name # Object attribute (contains name of opened file)f.closed # Object attribute (confirm if file is closed)</source>:#Next, issue the following commands to read data from the buffer of the opened file and store the contents into a variable called "<code>read_data"</code>, and then confirm the contents of the variable "<code>read_data</code>:<source lang="python">
read_data = f.read()
print(read_data)</source><br>After you have completed accessing data within a file, you should '''close''' the file in order to free up the computer resources. It is sometimes useful to first confirm that the file is still open prior to closing it.<br><br>:#Issue the following object attribute will provide a boolean value to confirm that the file is still open (''true'' indicates closed and ''false'But really you should know - it' indicates open):<source lang="python">f.closed </source>:#Finally, issue the following object method and object attribute to close the file, and then verify s your code that the file has been successfully closedwould have opened it:<source lang="python">
f.close() # This method will close the file
f.closed # Confirm that the file is closed</source><br>Let's take a moment to revisit the '''file read''' sequence. The following code sequence will open a file, store the contents of a file into a variable, close the file and provide confirmation that the file has been closed:<blockquote><br><span stylesource lang="font-family:courier;python">f = open('data.txt', 'r') # Open file<br>read_data = f.read() # Read from file<br>f.close() # Close file<br>f.closed # Confirm file is closed</span><br></blockquote><br>Another way to read data from a file is using the '''with''' looping statement. The advantage by using the ''with'' loop is that the file will automatically close when the data within the file has been completely read<br><br>:#To demonstrate, issue the following code block:<source lang="python">with open('data.txt', 'r') as f: # Open file read_data = f.read() # Read from filef.closed # Confirm file is closed</source><br>Let us take a few moments to revisit the data that has been read into the variable called '''"read_data"'''.<br><br>:#Let's re-issue the following command:<source lang="python">read_data</source><br>This command displays in this case contains the data from the file in a single <u>long</u> string. The end of each line in the file will show the special character ''''\n'''' which represents the '''newline character''' in a file used to separate lines (or records in a traditional "flat database file"). It would be convenient to '''split''' the line on the new-line characters, so each line can be stored into a separate array elements (or as an item in our case, a list!).<br><br>:#First issue the following commands to get help on the '''split''' method:<source lang="python">dir(read_data)help(read_data.split)</source>:#Next, issue the following commands to store Store the contents of our file into a list called '''list_of_lines''':<source lang="python">
read_data.split('\n') # Returns a list
list_of_lines = read_data.split('\n') # Saves returned list in variable
print(list_of_lines)
</source><br>Although the above sequence works, there are '''functions''' and '''methods''' the we can use with '''our object (called "f")''' to place lines from our file into a '''list'''. This would help to reduce code and is considered a more common method to store multiple lines or records within a list.<br><br>
:#Issue both method1 and method2 sequence of commands Try these two different means to see how you can store data into a list more efficiently:<source lang="python">
# METHOD 1:
method1 = list(f)
f.close()
print(method1)
# METHOD 2:
method2 = f.readlines()
f.close()
method2</source><br>Sometimes, you may need to only display retrieved data on the screen as opposed to processing the data. In these simple cases, there is no need to create extra-large variables to store the data, but rather print one line at a time onto the screen. Using this method will save computer resources while reading files.<br><br>:#To demonstrate, issue the following code sequence:<source lang="python">f = open('data.txt', 'r')for line in f: print(line, end='')f.close()</source><br>We can improve upon the previous coding sequence by using the '''strip()''' function. In the previous coding example, the python ''print()'' function by default adds the new-line character to the end of the line. Using the ''end='''' argument used in print replaces the '\n' at the end with nothing ''. This allows the print() to use the new-line characters found on each line of the file that was read. Though (if desired) you can always strip the new-line characters from any lines. The strip() function will remove all leading and trailing white-space, which may help in processing some lines or data.<br><br>:#To demonstrate, issue the following code sequence:<source lang="python">f = open('data.txt', 'r')for line in f: print(line.strip())f.close(method2)
</source>
=== Create a Python Script Demonstrating Reading Files ===
:'''Perform the Following Instructions'''::#Create the '''~/ops435/lab5/lab5a.py''' script. ::#Use the following as a template:<source lang="python">
#!/usr/bin/env python3
</source>
:::*This Python script will read the same file ('''data.txt''') that you previously created:::*The '''read_file_string()''' function should return a string:::*The '''read_file_list()''' function should return a list:::*The '''read_file_list()''' function must remove the new-line characters from each line in the list:::*'''Both functions must accept one argument''' which is a string:::*The script should show the exact output as the samples:::*The script should contain no errors
::::'''Sample Run 1:'''<source lang="python">
python3 lab5a.py
Hello World
</source>
::::'''Sample Run 2 (with import):'''<source lang="python">
import lab5a
file_name = 'data.txt'
print(lab5a.read_file_string(file_name))# Will print 'Hello World\nThis is the second line\nThird line\nLast line\n'print(lab5a.read_file_list(file_name))# Will print ['Hello World', 'This is the second line', 'Third line', 'Last line']
</source>
:::3. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<source lang="bash">
cd ~/ops435/lab5/
pwd #confirm that you are in the right directory
ls CheckLab5.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab5.py
python3 ./CheckLab5.py -f -v lab5a
</source>
:::4. Before proceeding, make certain that you identify any and all errors in lab5a.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.
<br><br>
== PART 2 - Writing To Files ==
:'''Perform the Following Steps:''' :xUp to this point, you have learned how to access text from a file. In this section, you will learn how to write text to a file. Writing data to a file is useful for creating new content in a file or updating (modifying) existing data contained within a file.
<blockquote style="margin-left:35px;">{{Admon/caution|style="padding-left:25px"|Risk of Losing File Contents|A common problem that new Python programmers may encounter is to accidentally erasing the erase existing contents of a file when writing new data to a file. When opening files for writing(using the ''''w'''' open function option), Python assumes existing content in the file is no longer wanted and it's immediately deleted; therefore, if in doubtyou wish to write data to a file but keep existing content, you need to use the open file option ''''a'''' (append new data to the a file instead!).}}</blockquote>::#To start, open the ipython3 shell:<source lang="python">ipython3</source>::#When opening a file for writing, the ''''w'''' option can be give to is specified with the '''open()''' function. When the 'w' option is provided the specified - previous contents (existing) content inside the file are is deleted, this deleting . This deletion takes place the moment the open() function is executed, not during when writing to the writefile. If the file that is being written to doesn't exitexist, it the file will be createdupon the file opening process.<br><br>:#Create a temporary Python file and open a non-existent data file (called file1.txt) for writing:<source lang="python">
f = open('file1.txt', 'w')
</source>
:#To confirm that the new file now exists and is empty, issue the following shell command:#<source lang="bash">ls -l file1.txt</source>To add lines of text to the file, you can use the '''write() ''' method for the '''file object'''. For safe file management, always Typically you end every line in a text file with a the special character ''''\n'''' to represent a "new line". Multiple lines may also be placed inside a single write, operation: simply put the special character ''''\n'''' wherever a line should end.<br><br>:#Try adding multiple lines:<source lang="python">
f.write('Line 1\nLine 2 is a little longer\nLine 3 is too\n')
</source>::#Once the '''write() ''' method has been runcompleted, the final step would be is to '''close() ''' the file. The file MUST be closed properly or else data will not consistently be written to the file. '''NOTE: Not closing a file can lead to corruption corrupted or not changes being mademissing file contents. ''':<br><source lang="python">
f.close()
</source>
::#View the contents of the file in the shell to make sure the write data was saved. We can use the ipython bash alias %cat to do this.written successfully:<source lang="pythonbash">%cat file1.txtLine 1Line 2 is a little longerLine 3 is too</source>::#Create another You will now create a new file called file2.txt, but this time, run multiple write() methods togetherin sequence. The ability You will often write to write() a file multiple lines like this allows for writes to take place times inside loops and more complex programs to continuously write to a file.loop:<br><source lang="python">
f = open('file2.txt', 'w')
f.write('Line 1\nLine 2 is a little longer\nLine 3 is tooas well\n')
f.write('This is the 4th line\n')
f.write('Last line in file\n')
f.close()
</source>
::#View Issue the following shell command to confirm that the contents of the were written to file2.txt to make sure the write data was saved.:<source lang="pythonbash">%cat file2.txtLine 1Line 2 is a little longerLine 3 is tooThis is the 4th lineLast line in file
</source>
<blockquote style="margin-left:35px;">{{Admon/important|style="padding-left:#View the 25px"|Make Backup Copies of Your Data Files|Since you might make a mistake, and accidentally destroy file contents when writing to your file, it is highly recommended to make backup copies of your files prior to running your Python scripts. This can be particularly useful when performing any future assignment involving writing to files.}}</blockquote><blockquote style="margin-left:35px;">{{Admon/caution|style="padding-left:25px"|Make Backup Copies of ALL your files|Since you are now writing code that opens files for writing you may accidentally truncate the file1wrong file (like your assignment file, for example). Make regular backups of all your work.txt Just copy it to make sure it has a USB stick or if you're bored - learn version control.}}</blockquote><br><ol style="margin-left:80px;"><li value="7">Issue the original data following shell commands to backup both of your newly-created files and has not been changedconfirm backup:<source lang="pythonbash">%cat cp file1.txt file1.txt.bkcp file2.txt file2.txt.bkLine 1ls -l file* Line 2 is a little longer</source></li><li>Let's demonstrate what can happen if you perform an incorrect write() operation:<source lang="python">Line 3 is too f = open('file2.txt', 'w')
</source>
::#In the event <source lang="bash">cat file2.txt</source>You should notice that the data previous content in your file2.txt file was destroyed. Why do you you think the previous data is no longer there?<br></li><li>Restore your file is important from the backup and should not be overwrittenverify the backup restoration:<source lang="bash">cp file2.txt.bk file2.txtcat file2.txt</source>To avoid overwriting the contents of a file, we can '''append ''' data to the end of the file instead. Use the option 'a' instead of 'w' to perform appending.:<br><br><source lang="python">
f = open('file1.txt', 'a')
f.write('This is the 4th line\n')
f.write('Last line in file\n')
f.close()
</source> ::#<source lang="bash">cat file1.txt</source>The final point thing to make consider when writing to files is to make sure certain that the values being written are '''strings'''. This means that before trying to place integers, floats, lists, or dictionaries into a file, first either convert the value using '''str() ''' function or extract the specific strings from items in the list. <br><br></li><li>In this example we convert a single number and all the numbers in a list to strings before writing them to a file:<source lang="python">
my_number = 1000
my_list = [1,2,3,4,5]
f.write(str(num) + '\n')
f.close()
</source></li>::#View the contents of the file3.txt to make sure <li>Confirm that the '''write data ()''' operation was saved.successful<source lang="pythonbash">%cat file3.txt 1000 1 2 3 4 5 </source></li></sourceol
=== Create a Python Script Demonstrating Writing to Files ===
:'''Perform the Following Instructions'''::#Copy '''~/ops435/lab5/lab5a.py''' script to '''~/ops435/lab5/lab5b.py''' script. (We need the previous read functions writtenthat you created).::#Use Add the following as a templatefunctions below the two functions that you already created:<source lang="python">#!/usr/bin/env python3 def read_file_string(file_name): # This is the same code from lab5a.py def read_file_list(file_name): # This is the same code from lab5a.py 
def append_file_string(file_name, string_of_lines):
# Takes two strings, appends the string to the end of the file
def copy_file_add_line_numbers(file_name_read, file_name_write):
# Takes two strings, reads data from first file, writes data to new file, adds line number to new file
</source>:# '''Replace''' the main section of your Python script near the bottom with the following:<source lang="python">
if __name__ == '__main__':
file1 = 'seneca1.txt'
copy_file_add_line_numbers(file2, file3)
print(read_file_string(file3))
</source> ::'''append_file_string():''':::#Takes '''two string arguments''':::#'''Appends''' to the file(Argument 1) all data from the string(Argument 2)::'''write_file_list():''' :::#Takes two arguments: a '''string''' and a '''list''':::#'''Writes''' to file(Argument 1) all lines of data found in the list(Argument 2)::'''copy_file_add_line_numbers():''':::#Takes two arguments: '''Both are files path-names''' (which happen to be strings):::#'''Reads''' all data from first file(Argument 1), and writes all lines into second file(Argument 2) '''adding''' line numbers:::#Line numbers should be added to the '''beginning''' of each line with a colon next to them(see sample output below for reference):::#'''Hint:''' Use an extra variable for the line number :::'''Sample Run 1:'''<source>rm seneca1.txt seneca2.txt seneca3.txt./lab5b.py First LineSecond LineThird Line Line 1Line 2Line 3 1:Line 12:Line 23:Line 3
</source>
:::'''append_file_string()'''::::#Takes two string arguments::::#Appends to the file(Argument 1) all data from the string(Argument Sample Run 2):::'''write_file_list()''' ::::#Takes two arguments, a string and a list::::#Writes to file(Argument 1run second time) all lines of data found in the list(Argument 2):::'''copy_file_add_line_numbers()'''::::#Takes two arguments, both strings, both filesnames::::#Reads all data from first file(Argument 1), writes all lines into secon file(Argument 2) adding line numbers::::#Line numbers should be added to the beginning of each line with a colon next to them(see sample output)::::#Hint: review len() and range() functions from lab 3 and lab 4 ::::'''Sample Run 1:'''<source lang="python">
python3 lab5b.py
First Line
Second Line
Third Line
First Line
Second Line
</source>
::::'''Sample Run 2 3 (with import):'''<source lang="python">
import lab5b
file1 = 'seneca1.txt'
lab5b.read_file_string(file1)
# Will print 'First Line\nSecond Line\nThird Line\nFirst Line\nSecond Line\nThird Line\n'
lab5b.write_file_list(file2, list1)
lab5b.read_file_string(file2)
# Will print 'Line 1\nLine 2\nLine 3\n'
lab5b.copy_file_add_line_numbers(file2, file3)
lab5b.read_file_string(file3)
# Will print '1:Line 1\n2:Line 2\n3:Line 3\n'
</source>
:::3. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<source lang="bash">
cd ~/ops435/lab5/
pwd #confirm that you are in the right directory
ls CheckLab5.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab5.py
python3 ./CheckLab5.py -f -v lab5b
</source>
:::4. Before proceeding, make certain that you identify any and all errors in lab5b.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.
<br><br>
= INVESTIGATION 2: Exceptions and Error Handling =
 :Running into errors in programming will be a common occurrence. You should expect that it will happen for any code that you write. In python , when a an error occurs, the python runtime raises a python object called an '''exception, which represents the error that occured. These exceptions are raised when python is no long able to handle what the code is trying to do'''. This section will give the programmer the ability teach you to catch these exceptions when they happen and to allow the program to continue running, however in many cases it might be a good idea or to stop the program when an exception happens anywayexecution with a readable error message.
== PART 1 - Handling Errors ==
 There are is a <u>massive amount </u> of exceptions, way too many to cover. But if Online references can be useful. If you are searching for a specific common exception check out the [https://docs.python.org/3/library/exceptions.html#exception-hierarchy Python Exception Documentation.] :'''Perform the Following Steps:''':In this section, we will provide examples of how to handle a few exceptions when creating Python scripts. :#To start, open the ipython3 shell:<source lang="python">ipython3</source>::#. Before we try and catch and detect exceptions, lets make sure we know a few ways attempting to make handle exception errors in python. The following code will , let's create an error, and then see how to can "handle" it:<br><source lang="python">
print('5' + 10)
</source>::#Immediately You should get an exception error similar to the following error occurs:<source lang="python">
---------------------------------------------------------------------------
TypeError Traceback (most recent call last) Fiel "<ipython-input-3-1b929b80ca50stdin> ", line 1, in <module>()----> 1 print(TypeError: Can't convert '5int' + 10)object to str implicitly
TypeError</source><br>'''Question: Can't convert 'int' object According to str implicitlythe exception error message, what do you think caused the error?<br></sourcebr>::#Firstly, what to look for here is Click on the exception name link '[https://docs.python.org/3/library/exceptions.html#concrete-exceptions https://docs.python.org/3/library/exceptions.html#concrete-exceptions.]' and scroll or search for '''TypeError '''. Take a few moments to determine what a ''TypeError.]' The Type ' exception error means .<br><br>You should have learned that the TypeError exception error indicates a mismatch of a type(i.e. string, int, float, list, etc). If Python doesn't know how to handle it, should it perhaps we could change the number into a string or change the string into a number?::#or at least provide a more user-friendly error message.<br><br>If we don't want the user of our program to have to learn how to write this program safelyread Python exceptions (which is a very good idea), we can catch /trap/handle this error while when it's happeninghappens. This is done with a specific block of code called a [https://docs.python.org/3/tutorial/errors.html#handling-exceptions '''try clause'''] where you place code inbetween in-between the '''try:''' and 'the '''except:'''coding blocks. In a general sense, it works like a modified if-else statement, where the try statement acts as a test, and the except statement will or will not handle the exception depending if it occurs or does NOT occur. That is to say, If no error occurs in the code contained in the '''except portion ''' section, the script will continue as usual but if an error occurs in the except section, then it can be skippedhandled with additional coding (like an user-friendly error message).<br>Let's demonstrate to handle our TypeError error with code that first does not contain an error and then similar code that DOES generate an error.<br><br>::#No ExceptionThe following code does NOT generate an error:<source lang="python">
try:
print(5 + 10)
except TypeError:
print('not At least one of the values is NOT an integer')
15
</source><br>You should notice that since there was NOT an error, the Python script performed the required task.<br><br>::#TypeError ExceptionThe following code handles an exception error to provide user-friendly feedback that at least one of the values is not an integer:<source lang="python">
try:
print(5 + 'ten')
except TypeError:
print('not At least one of the values is NOT an integer')
not At least one of the values is NOT an integer
</source>
::#Try and Let's generate another type of error where we try to open a file that doesn't exist:<source lang="python">
f = open('filethatdoesnotexist', 'r')
</source>
::#To Now, catch and handle this exception error specific error we could simply use:<source lang="python">
try:
f = open('filethatdoesnotexist', 'r')
except FileNotFoundError:
print('no file found')
</source>::#<br>Multiple exceptions can also be caught at the same time, such as does not exist, is a directory, or we don't have permission. Try <br><br>:#To test out the error handling code (previously issued), try removing permissions from the file, or creating specify a directory instead of a regular file, and opening then try to open it. :<source lang="python">
try:
f = open('filethatdoesnotexist', 'r')
f.write('hello world\n')
f.close()
except (FileNotFoundError, PermissionError, IsADirectoryIsADirectoryError):
print('failed to open file')
</source>
::#If you spend some By taking the time looking at to view the [https://docs.python.org/3/library/exceptions.html#exception-hierarchy Python Exception Hierarchy] we , you can see exactly how errors get caught in python. The options '''FileNotFoundError''', '''PermissionError''', and '''IsADirectory ''' are all inherit inherited from '''OSError, this '''. This means that while using more specific errors might be useful for better error messages and handling, it's not always possible to catch every error all the time.::#Another way to catch multiple exceptionsis with separate <code>except</code> bloks:<source lang="python">
try:
f = open(abc, 'r')
print('unknown error occured')
raise
</source>::#When catching multiple exceptions, make sure certain to catch the <u>lowest </u> ones on contained in the exception-hierarchy first. If For example, if you put 'Exception' first, both 'OSError' and 'FileNotFoundError', would never get caught.<br><br>'''TIP::#''' In python it's usually best to 'try:' and 'except:' code rather than to try and determine attempt to anticipate everything that could go wrong with logic and '''if ''' statements. For example, instead of checking to see if a file exists and we have read permissions, it can be better to just try and read the file and fail and catch any errors with 'OSError'.
=== Create a Python Script Which Handles Errors ===
:'''Perform the Following Instructions'''::#Create the '''~/ops435/lab5/lab5c.py''' script.::#Use the following as a template:<source lang="python">
#!/usr/bin/env python3
::::'''Sample Run 1:'''<source lang="python">
python3 lab5c.py
15
</source>
::::'''Sample Run 2 (with import):'''<source lang="python">
import lab5c
:::3. Exit the ipython3 shell, download the checking script and check your work. Enter the following commands from the bash shell.<source lang="bash">
cd ~/ops435/lab5/
pwd #confirm that you are in the right directory
ls CheckLab5.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab5.py
python3 ./CheckLab5.py -f -v lab5c
</source>
:::4. Before proceeding, make certain that you identify any and all errors in lab5c.py. When the checking script tells you everything is OK before proceeding to the next step.
<br><br>
::<span style="color:green;font-size:1.5em;">&#x2713;</span> Output of: <code>cat lab5a.py lab5b.py lab5c.py</code>
= Practice For QuizzesLAB REVIEW = # What is the purpose of a '''file object'''?# Write a Python command to '''open''' the text file called '''customers.txt''' for read-only operations.# Write Python code to efficiently store the contents of the file in question #2 as a large string (including new-line characters) called '''customer-data'''.# Write Python code to store the contents of the file in question #2 as a list, Tests, Midterm & Final Exam =removing the new-line characters.# What is the purpose of '''closing''' an open file? Write a Python command to close the file opened in question #2.# Write the Python command to confirm you successfully closed the '''customers.txt''' file in question #5. What is the returned status from that command to indicate that the file has been closed?# What is the difference between opening a file for '''writing''' data as opposed to opening a file for '''appending''' data? What can be the consequence if you don't understand the difference between writing and appending data?# Write a Python command to open the file '''customer-data.txt''' for writing data.# Write a Python command to save the text: '''customer 1: Guido van Rossum''' (including a new-line character) to the opened file called '''customer-data.txt'''# xBriefly explain the process writing a list as separate lines to an open file.# xWhat is the purpose of '''handling''' exception errors?# xWrite a Python script to prompt a user for the name of the file to open. Use exception error handling to provide an error message that the specific file name (display that exact name) does not exist; otherwise, open the file for reading and display the entire contents of the file (line-by-line). [[Category:OPS435-Python]]
1,760
edits