## ![](https://s3.amazonaws.com/python-ga/images/GA_Cog_Medium_White_RGB.png) {.separator}

Python Programming: Scripting

--- ## Lesson Objectives *After this lesson, you will be able to...* * Explain the uses of scripting. * Write scripts that perform file I/O. * Write scripts that take user input. --- ## Introduction Discussion: What comes to mind when you hear the word "scripting"? ![](https://c1.staticflickr.com/2/1570/25942496133_27fb6f2261_b.jpg) --- ## What's a Scripting Language? There are only two types of programming languages in the world: **scripting languages** or **compiled languages**. All languages, like Python, are one of these two categories. Scripting languages: - One is Python! - Write code, then immediate run it: `python my_file.py` - Executes statements in order. - Find a bug? Fix it, run it, repeat. --- ## What's a Scripting Language? Compiled languages: - Compile means "build". - *We can't immediate run code - the computer can't just read the code and needs to translate it to something it understands first.* - Write code, *then compile it (not quick!),* then run it. - Find a bug? Fix it, *wait for the code to compile,* run it, repeat. You don't need to memorize this - just know that there's a difference, and Python is scripting. What do you think a *script* is? --- ## What is a Script? Just some code that does something. - Usually written in a scripting language. - Can be as simple or as complex as needed! Let's write a script: - Create a file called `my_script.py` - Open the file in `Atom`. - Type the line ```python print("hello world!") ``` **CONGRATS**: You now have a script! Look familiar? You've been scripting since day 1! --- ## Scripting, Commonly When people say scripts, though, they usually mean code that: * Takes input. * Gives output. * Reads or writes to a file. * Performs a task. We have "perform a task" down! --- ## Quick Review **Script**: - Just code that does something. You've written dozens of scripts in Python so far! **Scripting Language**: - A language where you can immediately run code. Python is one! - Write -> Run. **Compiled Language**: - Compile means build! We can't immediately run code. - Write -> Build -> Run. We're only working with Python, so we can just write and run our code! **Next Up**: Playing with files in Python. --- ## Scripting, Part 1: Files Let's further our programming toolkit. On your computer, you can: - Create or open a file (text, jpg, Word doc...). - Read it. - Edit it. - Close it. These are pretty basic actions. Can we do it in Python? --- ## We Do: Let's Read a File! With files, there are three key points. 1. Tell Python to open the file: `my_file = open()` 2. Do something with the file! (Read it, edit it, etc). 3. Close the file when you're done: `my_file.close()` First, let's check out **read**: View, but not change, the contents, with `read()`. Let's try. On your Desktop, create a file called "hello.txt" with the word "hi" in it. 1. Now, also on your Desktop, create a file, `first_reading.py`. Fill it with: ```python my_file = open("hello.txt") print(my_file.read()) my_file.close() ``` 2. Run it! Note: The file must exist already! --- ## What About Editing Files? In programming, "edit" is referred to as "write", short for "write to." How do we write a file? `open()` has optional parameters: `open(, )` - Mode: "What do you want to do with the file?" The default is "read." Use `w` for "write": ```python # To read a file: my_file = open("hello.txt") print(my_file.read()) ## We want this to be write, not read! my_file.close() # To write a file: my_file = open("hello.txt", "w") ## Write some stuff my_file.close() ``` **Important:** Write *overwrites* the current file! --- ## We Do: Writing Files Let's try this. Change your script. We're going to make it a little more complex - since we're programming, we can use variables! ```python # Open the file hello.txt my_file = open("hello.txt", "w") # Write some content to my_file.txt my_file.write("Hello world") my_text = "Apple juice is delicious." # Use the variable! my_file.write(my_text) # Writes "Apple juice is delicious." my_file.write("Have a nice day!") # Always close the file my_file.close() ``` Run it! Open the file to check. **Thought:** How could you make new lines? --- ## Discussion: Writing Complex Strings What happens if we try to `write` multiple strings? ```python # But it doesn't work with write. my_file = open("a_file.txt", "w") my_text = "Apple juice is delicious." my_file.write(my_text, "Don't you think?") # Error! Write takes 1 argument (2 given). my_file.close() ``` Error! `write` only takes one argument. We need to concat the strings. *Always just pass one argument to file.write()*. ```python my_file = open("a_file.txt", "w") my_text = "Apple juice is delicious." string_to_write = my_text + "Don't you think?" # Make one string here! my_file.write(string_to_write) my_file.close() ``` --- ## We Do: Creating Files What if the file doesn't exist yet? **Write** to the rescue! * Write opens a file for writing... * But it also creates it if need be! At the bottom of your script, add: ```python # Open OR create file totally_new_file.txt my_new_file = open("totally_new_file.txt", "w") # Write some content to totally_new_file.txt my_new_file.write("Content goes here") # Always close the file my_new_file.close() ``` Check your desktop after running it! --- ## You Do: Create a File Now, try it yourself. Write a new script: - `open()`, in read mode, your existing `a_file.txt`. - `.read()` the file and save the contents into a variable, `file_contents`. - Using `.write()`, create a new file called `b_file.txt`. - Write `file_contents` to `b_file.txt`. Don't forget to `close()` your files! --- ## Create a File: Solution ```python my_file = open("a_file.txt", "r") file_contents = my_file.read() my_file.close() my_file_script = open("b_file.txt", "w") my_file_script.write(file_contents) my_file_script.close() ``` --- ## Quick Review You can open, read, and write files with Python. Write will create the file if it doesn't already exist. Always close your files! ```python file_to_read = open("a_file.txt") file_to_write = open("my_file_script.txt", "w") string_to_write = file_to_read.read() file_to_write.write(string_to_write) file_to_read.close() file_to_write.close() ``` **Next up:** More advanced file options. --- ## Other File Modes What if we want to read AND write a file? Or write to the end of a file instead of overwriting what's there? `open` has a few other modes. | Value | Mode | Purpose | | ----- | ------------ | -------------- | | `r` | Reading | Read only. The default! | | `w` | Write | Use to change (and create) file contents | | `a` | Append | Use to write to the end of a file | | `r+` | Read Plus | Can do both read and write | > Don't memorize this; just know it's there. A lot of programming is understanding your options and then Googling the syntax! The biggest thing for you to learn is the concepts that Python can do. --- ## I Do: The With Keyword Always remembering to close a file can be hard. There's another way to open files so Python closes it for us! ```python # Instead of: file_object = open("my_file.txt", "w") file_object.write("Hello World!") file_object.close() # We can say: with open("my_file.txt", "w") as file_object: # This line replaces the open and close above file_object.write("Hello World!") # This line is the same; note the indent! ```` --- ## What Else is in File? These are just for reference - we won't be using them! - Do you have a list that you want to write on multiple lines? Use `my_file.writelines([])` - Does your file have things on multiple lines you want to read into a list variable? Use `list_contents = my_file.readlines()` - Separating some written lines? Add `\n` to the `write()` --- ## Quick Review: File has a lot of advanced options. - You can write a list across multiple lines, or read a file with multiple lines into a list variable. - Write only takes one argument, so concat your strings! - You can open files using `with` to automatically close them. ```python # Instead of: file_object = open("my_file.txt", "w") file_object.write("Hello World!") file_object.close() # We can say: with open("my_file.txt", "w") as file_object: # This line replaces the open and close above file_object.write("Hello World!") # This line is the same; note the indent! ```` **Next up:** User Input! --- ## What about User Input? We've just done a lot with file I/O (in/out). We can prompt users for information, too. You've seen this a few times (remember the error checking, with the try/catch?)! It's very common. ```python # Prompts with "input" # Saves result in user_name user_name = input("Please type your name:") ``` --- ## You Do: Bring it all Together! 1. Create a file called `about_script.py`. 2. In it, prompt the user for their name. Then, prompt them for their favorite food. 3. Using write, create a file called `about_me.txt`. 3. In `about_me.txt`, write out the name and favorite food in a sentence. **Bonus**: Use `format` for forming your sentence! --- ## Bring it all Together, Solution ```python user_name = input("Please type your name: ") user_food = input("Please type your favorite food: ") file = open("about_me.txt", "w") file.write("My name is " + user_name + " and my favorite food is " + user_food) ``` --- ## Summary and Q&A Scripting language vs compiled language. - Scripting languages: Write -> Run. - Compiled languages: Write -> Build -> Run. Script: - Just some code! --- ## Summary and Q&A File I/O: - `my_file = open("a_file.txt", "w")` - `my_file.write("Some content")` - `my_file.write(my_text)` - `my_file.close()` User input - `user_name = input("Please type your name:")` --- ## Additional Resources * [Socratica Video: Text Files](https://www.youtube.com/watch?v=H_R5yRtFtuc) * [Executing a Python Script](https://www.python-course.eu/python3_execute_script.php) * [Reading and Writing Files](http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python) * [File Object Documentation](https://www.tutorialspoint.com/python3/python_files_io.htm) * [Binary vs Text Files](https://www.nayuki.io/page/what-are-binary-and-text-files)