- Lab
- A Cloud Guru
Working with Streams in Python
We are all used to working with files on disk. Reading and writing files to disk is second nature to anyone that does more with a computer than just emailing and web surfing. Streams are representation of files in memory. Using standard file i/o, when opening and reading a file on disk, the contents are placed in memory. This "memory file" can be used to write a new file or write changes to the old one. Using the `io` library, a "memory file" can be used to send the contents to other applications without ever writing them to disk. In this lab you will get a chance to use streams to copy a file, and to provide an in-memory file for consumption by a different application. **Please Note:** The contents of `book.txt` was taken from Shakespeare's Sonnets.
Path Info
Table of Contents
-
Challenge
Create a Copy for the Editing Department
Please follow guiding comments in the
streams.py
file. You will be asked to create a function from scratch that takes an input and an output, and then makes a copy of the input to the output.import io def copy_book(input, output): """ write the input to the output """ output.write(input.read()) if __name__ == "__main__": # author's novel is stored in file `book.txt` # create a copy of the book for the editing department # append _text to the end of the name of the copy # student input needed, please use book_input and book_copy # as the handles to the files book_input = open("book.txt", "r+b") book_copy = open("book_edit.txt", "w+b") copy_book(book_input, book_copy) book_input.seek(0) book_copy.seek(0) # test file exists try: f = open("book_edit.txt", "r+b") except FileNotFoundError: print("book_edit.txt does not exist") finally: f.close() # test file contents are the same assert book_input.read() == book_copy.read() # code below this is not shown
-
Challenge
Generate a BytesIO Object of Book
Please follow guiding comments in the
streams.py
file. You will be asked to create aBytesIO
object with the book contents. Finally, you will be asked to close all openi/o
streams.# code above this is not shown # write book to a BytesIO object using function copy_book # make sure the cursor is at the start of each file (memory file also) # send to copy function book_stream = io.BytesIO() book_input.seek(0) copy_book(book_input, book_stream) book_stream.seek(0) book_input.seek(0) # test file exists if not book_stream.readable(): print("book_stream does not exist") exit(1) # test assert book_input.read() == book_stream.getvalue(), f"Expected: {book_copy.read()}\nGot: {book_stream.getvalue()}" # close all open files book_input.close() book_copy.close() book_stream.close() # test assert book_input.closed == True assert book_copy.closed == True assert book_stream.closed == True
What's a lab?
Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.
Provided environment for hands-on practice
We will provide the credentials and environment necessary for you to practice right within your browser.
Guided walkthrough
Follow along with the author’s guided walkthrough and build something new in your provided environment!
Did you know?
On average, you retain 75% more of your learning if you get time for practice.