- Lab
-
Libraries: If you want this lab, consider one of these libraries.
- Cloud

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.

Lab 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
About the author
Real skill practice before real-world application
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.
Learn by doing
Engage hands-on with the tools and technologies you’re learning. You pick the skill, we provide the credentials and environment.
Follow your guide
All labs have detailed instructions and objectives, guiding you through the learning process and ensuring you understand every step.
Turn time into mastery
On average, you retain 75% more of your learning if you take time to practice. Hands-on labs set you up for success to make those skills stick.