Automate the Boring Stuff with Python
Subtitle: Practical Programming for Total Beginners
By: by Al Sweigart.
Publisher: No Starch Press
Published: 2015
Place of publication: San Francisco, USA
Language: eng
Format: Paperback, eBook
Number of pages: 504
ISBN-13: 9781593275990
Copyright date: 2015
Table of contents: title: Acknowledgments
pagenum: xxiii; title: Introduction
pagenum: 1; title: Whom Is This Book For?
pagenum: 2; title: Conventions
pagenum: 2; title: What Is Programming?
pagenum: 3; title: What Is Python?
pagenum: 4; title: Programmers Don't Need to Know Much Math
pagenum: 4; title: Programming Is a Creative Activity
pagenum: 5; title: About This Book
pagenum: 5; title: Downloading and Installing Python
pagenum: 6; title: Starting IDLE
pagenum: 7; title: The Interactive Shell
pagenum: 8; title: How to Find Help
pagenum: 8; title: Asking Smart Programming Questions
pagenum: 9; title: Summary
pagenum: 10; label: Part I
title: Python Programming Basics
pagenum: 11; label: 1
title: Python Basics
pagenum: 13; title: Entering Expressions into the Interactive Shell
pagenum: 14; title: The Integer, Floating-Point, and String Data Types
pagenum: 16; title: String Concatenation and Replication
pagenum: 17; title: Storing Values in Variables
pagenum: 18; title: Assignment Statements
pagenum: 18; title: Variable Names
pagenum: 20; title: Your First Program
pagenum: 21; title: Dissecting Your Program
pagenum: 22; title: Comments
pagenum: 23; title: The print() Function
pagenum: 23; title: The input() Function
pagenum: 23; title: Printing the User's Name
pagenum: 24; title: The len() Function
pagenum: 24; title: The str(), int(), and float() Functions
pagenum: 25; title: Summary
pagenum: 28; title: Practice Questions
pagenum: 28; label: 2
title: Flow Control
pagenum: 31; title: Boolean Values
pagenum: 32; title: Comparison Operators
pagenum: 33; title: Boolean Operators
pagenum: 35; title: Binary Boolean Operators
pagenum: 35; title: The not Operator
pagenum: 36; title: Mixing Boolean and Comparison Operators
pagenum: 36; title: Elements of Flow Control
pagenum: 37; title: Conditions
pagenum: 37; title: Blocks of Code
pagenum: 37; title: Program Execution
pagenum: 38; title: Flow Control Statements
pagenum: 38; title: if Statements
pagenum: 38; title: else Statements
pagenum: 39; title: elif Statements
pagenum: 40; title: while Loop Statements
pagenum: 45; title: break Statements
pagenum: 49; title: continue Statements
pagenum: 50; title: for Loops and the range() Function
pagenum: 53; title: Importing Modules
pagenum: 57; title: from import Statements
pagenum: 58; title: Ending a Program Early with sys.exit()
pagenum: 58; title: Summary
pagenum: 58; title: Practice Questions
pagenum: 59; label: 3
title: Functions
pagenum: 61; title: def Statements with Parameters
pagenum: 63; title: Return Values and return Statements
pagenum: 63; title: The None Value
pagenum: 65; title: Keyword Arguments and print()
pagenum: 65; title: Local and Global Scope
pagenum: 67; title: Local Variables Cannot Be Used in the Global Scope
pagenum: 67; title: Local Scopes Cannot Use Variables in Other Local Scopes
pagenum: 68; title: Global Variables Can Be Read from a Local Scope
pagenum: 69; title: Local and Global Variables with the Same Name
pagenum: 69; title: The global Statement
pagenum: 70; title: Exception Handling
pagenum: 72; title: A Short Program: Guess the Number
pagenum: 74; title: Summary
pagenum: 76; title: Practice Questions
pagenum: 76; title: Practice Projects
pagenum: 77; title: The Collatz Sequence
pagenum: 77; title: Input Validation
pagenum: 77; label: 4
title: Lists
pagenum: 79; title: The List Data Type
pagenum: 80; title: Getting Individual Values in a List with Indexes
pagenum: 80; title: Negative Indexes
pagenum: 82; title: Getting Sublists with Slices
pagenum: 82; title: Getting a List's Length with len()
pagenum: 83; title: Changing Values in a List with Indexes
pagenum: 83; title: List Concatenation and List Replication
pagenum: 83; title: Removing Values from Lists with del Statements
pagenum: 84; title: Working with Lists
pagenum: 84; title: Using for Loops with Lists
pagenum: 86; title: The in and not in Operators
pagenum: 87; title: The Multiple Assignment Trick
pagenum: 87; title: Augmented Assignment Operators
pagenum: 88; title: Methods
pagenum: 89; title: Finding a Value in a List with the index() Method
pagenum: 89; title: Adding Values to Lists with the append() and insert() Methods
pagenum: 89; title: Removing Values from Lists with remove()
pagenum: 90; title: Sorting the Values in a List with the sort() Method
pagenum: 91; title: Example Program: Magic 8 Ball with a List
pagenum: 92; title: List-like Types: Strings and Tuples
pagenum: 93; title: Mutable and Immutable Data Types
pagenum: 94; title: The Tuple Data Type
pagenum: 96; title: Converting Types with the list() and tuple() Functions
pagenum: 97; title: References
pagenum: 97; title: Passing References
pagenum: 100; title: The copy Module's copy() and deepcopy() Functions
pagenum: 100; title: Summary
pagenum: 101; title: Practice Questions
pagenum: 102; title: Practice Projects
pagenum: 102; title: Comma Code
pagenum: 102; title: Character Picture Grid
pagenum: 103; label: 5
title: Dictionaries and Structuring Data
pagenum: 105; title: The Dictionary Data Type
pagenum: 105; title: Dictionaries vs. Lists
pagenum: 106; title: The keys(), values(), and items() Methods
pagenum: 107; title: Checking Whether a Key or Value Exists in a Dictionary
pagenum: 109; title: The get() Method
pagenum: 109; title: The setdefault() Method
pagenum: 110; title: Pretty Printing
pagenum: 111; title: Using Data Structures to Model Real-World Things
pagenum: 112; title: A Tic-Tac-Toe Board
pagenum: 113; title: Nested Dictionaries and Lists
pagenum: 117; title: Summary
pagenum: 119; title: Practice Questions
pagenum: 119; title: Practice Projects
pagenum: 120; title: Fantasy Game Inventory
pagenum: 120; title: List to Dictionary Function for Fantasy Game Inventory
pagenum: 120; label: 6
title: Manipulating Strings
pagenum: 123; title: Working with Strings
pagenum: 123; title: String Literals
pagenum: 124; title: Indexing and Slicing Strings
pagenum: 126; title: The in and not in Operators with Strings
pagenum: 127; title: Useful String Methods
pagenum: 127; title: The upper(), lower(), isupper(), and islower() String Methods
pagenum: 128; title: The isX String Methods
pagenum: 129; title: The startswith() and endswith() String Methods
pagenum: 131; title: The join() and split() String Methods
pagenum: 132; title: Justifying Text with rjust(), ljust(), and center()
pagenum: 133; title: Removing Whitespace with strip(), rstrip(), and lstrip()
pagenum: 134; title: Copying and Pasting Strings with the pyperclip Module
pagenum: 135; label: Project
title: Password Locker
pagenum: 136; title: Step 1: Program Design and Data Structures
pagenum: 136; title: Step 2: Handle Command Line Arguments
pagenum: 137; title: Step 3: Copy the Right Password
pagenum: 137; label: Project
title: Adding Bullets to Wiki Markup
pagenum: 139; title: Step 1: Copy and Paste from the Clipboard
pagenum: 139; title: Step 2: Separate the Lines of Text and Add the Star
pagenum: 140; title: Step 3: Join the Modified Lines
pagenum: 141; title: Summary
pagenum: 141; title: Practice Questions
pagenum: 142; title: Practice Project
pagenum: 142; title: Table Printer
pagenum: 142; label: Part II
title: Automating Tasks
pagenum: 145; label: 7
title: Pattern Matching with Regular Expressions
pagenum: 147; title: Finding Patterns of Text Without Regular Expressions
pagenum: 148; title: Finding Patterns of Text with Regular Expressions
pagenum: 150; title: Creating Regex Objects
pagenum: 150; title: Matching Regex Objects
pagenum: 151; title: Review of Regular Expression Matching
pagenum: 152; title: More Pattern Matching with Regular Expressions
pagenum: 152; title: Grouping with Parentheses
pagenum: 152; title: Matching Multiple Groups with the Pipe
pagenum: 153; title: Optional Matching with the Question Mark
pagenum: 154; title: Matching Zero or More with the Star
pagenum: 155; title: Matching One or More with the Plus
pagenum: 155; title: Matching Specific Repetitions with Curly Brackets
pagenum: 156; title: Greedy and Nongreedy Matching
pagenum: 156; title: The findall() Method
pagenum: 157; title: Character Classes
pagenum: 158; title: Making Your Own Character Classes
pagenum: 159; title: The Caret and Dollar Sign Characters
pagenum: 159; title: The Wildcard Character
pagenum: 160; title: Matching Everything with Dot-Star
pagenum: 161; title: Matching Newlines with the Dot Character
pagenum: 162; title: Review of Regex Symbols
pagenum: 162; title: Case-Insensitive Matching
pagenum: 163; title: Substituting Strings with the sub() Method
pagenum: 163; title: Managing Complex Regexes
pagenum: 164; title: Combining re.IGNORECASE, re.DOTALL, and re.VERBOSE
pagenum: 164; title: Project: Phone Number and Email Address Extractor
pagenum: 165; title: Step 1: Create a Regex for Phone Numbers
pagenum: 166; title: Step 2: Create a Regex for Email Addresses
pagenum: 166; title: Step 3: Find All Matches in the Clipboard Text
pagenum: 167; title: Step 4: Join the Matches into a String for the Clipboard
pagenum: 168; title: Running the Program
pagenum: 169; title: Ideas for Similar Programs
pagenum: 169; title: Summary
pagenum: 169; title: Practice Questions
pagenum: 170; title: Practice Projects
pagenum: 171; title: Strong Password Detection
pagenum: 171; title: Regex Version of strip()
pagenum: 171; label: 8
title: Reading and Writing Files
pagenum: 173; title: Files and File Paths
pagenum: 173; title: Backslash on Windows and Forward Slash on OS X and Linux
pagenum: 174; title: The Current Working Directory
pagenum: 175; title: Absolute vs. Relative Paths
pagenum: 175; title: Creating New Folders with os.makedirs()
pagenum: 176; title: The os.path Module
pagenum: 177; title: Handling Absolute and Relative Paths
pagenum: 177; title: Finding File Sizes and Folder Contents
pagenum: 179; title: Checking Path Validity
pagenum: 180; title: The File Reading/Writing Process
pagenum: 180; title: Opening Files with the open() Function
pagenum: 181; title: Reading the Contents of Files
pagenum: 182; title: Writing to Files
pagenum: 183; title: Saving Variables with the shelve Module
pagenum: 184; title: Saving Variables with the pprint.pformat() Function
pagenum: 185; title: Project: Generating Random Quiz Files
pagenum: 186; title: Step 1: Store the Quiz Data in a Dictionary
pagenum: 187; title: Step 2: Create the Quiz File and Shuffle the Question Order
pagenum: 188; title: Step 3: Create the Answer Options
pagenum: 189; title: Step 4: Write Content to the Quiz and Answer Key Files
pagenum: 189; title: Project: Multiclipboard
pagenum: 191; title: Step 1: Comments and Shelf Setup
pagenum: 192; title: Step 2: Save Clipboard Content with a Keyword
pagenum: 192; title: Step 3: List Keywords and Load a Keyword's Content
pagenum: 193; title: Summary
pagenum: 194; title: Practice Questions
pagenum: 194; title: Practice Projects
pagenum: 194; title: Extending the Multiclipboard
pagenum: 194; title: Mad Libs
pagenum: 195; title: Regex Search
pagenum: 195; label: 9
title: Organizing Files
pagenum: 197; title: The shutil Module
pagenum: 198; title: Copying Files and Folders
pagenum: 198; title: Moving and Renaming Files and Folders
pagenum: 199; title: Permanently Deleting Files and Folders
pagenum: 200; title: Safe Deletes with the send2trash Module
pagenum: 201; title: Walking a Directory Tree
pagenum: 202; title: Compressing Files with the zipfile Module
pagenum: 203; title: Reading ZIP Files
pagenum: 204; title: Extracting from ZIP Files
pagenum: 205; title: Creating and Adding to ZIP Files
pagenum: 205; title: Project: Renaming Files with American-Style Dates to European-Style Dates
pagenum: 206; title: Step 1: Create a Regex for American-Style Dates
pagenum: 206; title: Step 2: Identify the Date Parts from the Filenames
pagenum: 207; title: Step 3: Form the New Filename and Rename the Files
pagenum: 209; title: Ideas for Similar Programs
pagenum: 209; title: Project: Backing Up a Folder into a ZIP File
pagenum: 209; title: Step 1: Figure Out the ZIP File's Name
pagenum: 210; title: Step 2: Create the New ZIP File
pagenum: 211; title: Step 3: Walk the Directory Tree and Add to the ZIP File
pagenum: 211; title: Ideas for Similar Programs
pagenum: 212; title: Summary
pagenum: 212; title: Practice Questions
pagenum: 213; title: Practice Projects
pagenum: 213; title: Selective Copy
pagenum: 213; title: Deleting Unneeded Files
pagenum: 213; title: Filling in the Gaps
pagenum: 214; label: 10
title: Debugging
pagenum: 215; title: Raising Exceptions
pagenum: 216; title: Getting the Traceback as a String
pagenum: 217; title: Assertions
pagenum: 219; title: Using an Assertion in a Traffic Light Simulation
pagenum: 219; title: Disabling Assertions
pagenum: 221; title: Logging
pagenum: 221; title: Using the logging Module
pagenum: 221; title: Don't Debug with print()
pagenum: 223; title: Logging Levels
pagenum: 223; title: Disabling Logging
pagenum: 224; title: Logging to a File
pagenum: 225; title: IDLE's Debugger
pagenum: 225; title: Go
pagenum: 226; title: Step
pagenum: 226; title: Over
pagenum: 226; title: Out
pagenum: 227; title: Quit
pagenum: 227; title: Debugging a Number Adding Program
pagenum: 227; title: Breakpoints
pagenum: 229; title: Summary
pagenum: 231; title: Practice Questions
pagenum: 231; title: Practice Project
pagenum: 232; title: Debugging Coin Toss
pagenum: 232; label: 11
title: Web Scraping
pagenum: 233; title: Project: maplt.py with the webbrowser Module
pagenum: 234; title: Step 1: Figure Out the URL
pagenum: 234; title: Step 2: Handle the Command Line Arguments
pagenum: 235; title: Step 3: Handle the Clipboard Content and Launch the Browser
pagenum: 236; title: Ideas for Similar Programs
pagenum: 236; title: Downloading Files from the Web with the requests Module
pagenum: 237; title: Downloading a Web Page with the requests.get() Function
pagenum: 237; title: Checking for Errors
pagenum: 238; title: Saving Downloaded Files to the Hard Drive
pagenum: 239; title: HTML
pagenum: 240; title: Resources for Learning HTML
pagenum: 240; title: A Quick Refresher
pagenum: 240; title: Viewing the Source HTML of a Web Page
pagenum: 241; title: Opening Your Browser's Developer Tools
pagenum: 242; title: Using the Developer Tools to Find HTML Elements
pagenum: 244; title: Parsing HTML with the BeautifulSoup Module
pagenum: 245; title: Creating a BeautifulSoup Object from HTML
pagenum: 245; title: Finding an Element with the select() Method
pagenum: 246; title: Getting Data from an Element's Attributes
pagenum: 248; title: Project: "I'm Feeling Lucky" Google Search
pagenum: 248; title: Step 1: Get the Command Line Arguments and Request the Search Page
pagenum: 249; title: Step 2: Find All the Results
pagenum: 249; title: Step 3: Open Web Browsers for Each Result
pagenum: 250; title: Ideas for Similar Programs
pagenum: 251; title: Project: Downloading All XKCD Comics
pagenum: 251; title: Step 1: Design the Program
pagenum: 252; title: Step 2: Download the Web Page
pagenum: 253; title: Step 3: Find and Download the Comic Image
pagenum: 254; title: Step 4: Save the Image and Find the Previous Comic
pagenum: 255; title: Ideas for Similar Programs
pagenum: 256; title: Controlling the Browser with the selenium Module
pagenum: 256; title: Starting a Selenium-Controlled Browser
pagenum: 256; title: Finding Elements on the Page
pagenum: 257; title: Clicking the Page
pagenum: 259; title: Filling Out and Submitting Forms
pagenum: 259; title: Sending Special Keys
pagenum: 260; title: Clicking Browser Buttons
pagenum: 261; title: More Information on Selenium
pagenum: 261; title: Summary
pagenum: 261; title: Practice Questions
pagenum: 261; title: Practice Projects
pagenum: 262; title: Command Line Emailer
pagenum: 262; title: Image Site Downloader
pagenum: 263; title: 2048
pagenum: 263; title: Link Verification
pagenum: 263; label: 12
title: Working with Excel Spreadsheets
pagenum: 265; title: Excel Documents
pagenum: 266; title: Installing the openpyxl Module
pagenum: 266; title: Reading Excel Documents
pagenum: 266; title: Opening Excel Documents with OpenPyXL
pagenum: 267; title: Getting Sheets from the Workbook
pagenum: 268; title: Getting Cells from the Sheets
pagenum: 268; title: Converting Between Column Letters and Numbers
pagenum: 270; title: Getting Rows and Columns from the Sheets
pagenum: 270; title: Workbooks, Sheets, Cells
pagenum: 272; title: Project: Reading Data from a Spreadsheet
pagenum: 272; title: Step 1: Read the Spreadsheet Data
pagenum: 273; title: Step 2: Populate the Data Structure
pagenum: 274; title: Step 3: Write the Results to a File
pagenum: 275; title: Ideas for Similar Programs
pagenum: 276; title: Writing Excel Documents
pagenum: 277; title: Creating and Saving Excel Documents
pagenum: 277; title: Creating and Removing Sheets
pagenum: 278; title: Writing Values to Cells
pagenum: 278; title: Project: Updating a Spreadsheet
pagenum: 279; title: Step 1: Set Up a Data Structure with the Update Information
pagenum: 280; title: Step 2: Check All Rows and Update Incorrect Prices
pagenum: 281; title: Ideas for Similar Programs
pagenum: 281; title: Setting the Font Style of Cells
pagenum: 282; title: Font Objects
pagenum: 282; title: Formulas
pagenum: 284; title: Adjusting Rows and Columns
pagenum: 285; title: Setting Row Height and Column Width
pagenum: 285; title: Merging and Unmerging Cells
pagenum: 286; title: Freeze Panes
pagenum: 287; title: Charts
pagenum: 288; title: Summary
pagenum: 290; title: Practice Questions
pagenum: 291; title: Practice Projects
pagenum: 291; title: Multiplication Table Maker
pagenum: 291; title: Blank Row Inserter
pagenum: 292; title: Spreadsheet Cell Inverter
pagenum: 292; title: Text Files to Spreadsheet
pagenum: 293; title: Spreadsheet to Text Files
pagenum: 293; label: 13
title: Working with PDF and Word Documents
pagenum: 295; title: PDF Documents
pagenum: 295; title: Extracting Text from PDFs
pagenum: 296; title: Decrypting PDFs
pagenum: 297; title: Creating PDFs
pagenum: 298; title: Project: Combining Select Pages from Many PDFs
pagenum: 303; title: Step 1: Find All PDF Files
pagenum: 304; title: Step 2: Open Each PDF
pagenum: 304; title: Step 3: Add Each Page
pagenum: 305; title: Step 4: Save the Results
pagenum: 305; title: Ideas for Similar Programs
pagenum: 306; title: Word Documents
pagenum: 306; title: Reading Word Documents
pagenum: 307; title: Getting the Full Text from a .docx File
pagenum: 308; title: Styling Paragraph and Run Objects
pagenum: 309; title: Creating Word Documents with Nondefault Styles
pagenum: 310; title: Run Attributes
pagenum: 311; title: Writing Word Documents
pagenum: 312; title: Adding Headings
pagenum: 314; title: Adding Line and Page Breaks
pagenum: 315; title: Adding Pictures
pagenum: 315; title: Summary
pagenum: 316; title: Practice Questions
pagenum: 316; title: Practice Projects
pagenum: 317; title: PDF Paranoia
pagenum: 317; title: Custom Invitations as Word Documents
pagenum: 317; title: Brute-Force PDF Password Breaker
pagenum: 318; label: 14
title: Working with CSV Files and JSON Data
pagenum: 319; title: The csv Module
pagenum: 320; title: Reader Objects
pagenum: 321; title: Reading Data from Reader Objects in a for Loop
pagenum: 322; title: Writer Objects
pagenum: 322; title: The Delimiter and Lineterminator Keyword Arguments
pagenum: 323; title: Project: Removing the Header from CSV Files
pagenum: 324; title: Step 1: Loop Through Each CSV File
pagenum: 325; title: Step 2: Read in the CSV File
pagenum: 325; title: Step 3: Write Out the CSV File Without the First Row
pagenum: 326; title: Ideas for Similar Programs
pagenum: 327; title: JSON and APIs
pagenum: 327; title: The json Module
pagenum: 328; title: Reading JSON with the loads() Function
pagenum: 328; title: Writing JSON with the dumps() Function
pagenum: 329; title: Project: Fetching Current Weather Data
pagenum: 329; title: Step 1: Get Location from the Command Line Argument
pagenum: 330; title: Step 2: Download the JSON Data
pagenum: 330; title: Step 3: Load JSON Data and Print Weather
pagenum: 331; title: Ideas for Similar Programs
pagenum: 332; title: Summary
pagenum: 333; title: Practice Questions
pagenum: 333; title: Practice Project
pagenum: 333; title: Excel-to-CSV Converter
pagenum: 333; label: 15
title: Keeping Time, Scheduling Tasks, and Launching Programs
pagenum: 335; title: The time Module
pagenum: 336; title: The time.time() Function
pagenum: 336; title: The time.sleep() Function
pagenum: 337; title: Rounding Numbers
pagenum: 338; title: Project: Super Stopwatch
pagenum: 338; title: Step 1: Set Up the Program to Track Times
pagenum: 339; title: Step 2: Track and Print Lap Times
pagenum: 339; title: Ideas for Similar Programs
pagenum: 340; title: The datetime Module
pagenum: 341; title: The timedelta Data Type
pagenum: 342; title: Pausing Until a Specific Date
pagenum: 344; title: Converting Datetime Objects into Strings
pagenum: 344; title: Converting Strings into Datetime Objects
pagenum: 345; title: Review of Python's Time Functions
pagenum: 346; title: Multithreading
pagenum: 347; title: Passing Arguments to the Thread's Target Function
pagenum: 348; title: Concurrency Issues
pagenum: 349; title: Project: Multithreaded XKCD Downloader
pagenum: 350; title: Step 1: Modify the Program to Use a Function
pagenum: 350; title: Step 2: Create and Start Threads
pagenum: 351; title: Step 3: Wait for All Threads to End
pagenum: 352; title: Launching Other Programs from Python
pagenum: 352; title: Passing Command Line Arguments to Popen()
pagenum: 354; title: Task Scheduler, launchd, and cron
pagenum: 354; title: Opening Websites with Python
pagenum: 355; title: Running Other Python Scripts
pagenum: 355; title: Opening Files with Default Applications
pagenum: 355; title: Project: Simple Countdown Program
pagenum: 357; title: Step 1: Count Down
pagenum: 357; title: Step 2: Play the Sound File
pagenum: 357; title: Ideas for Similar Programs
pagenum: 358; title: Summary
pagenum: 358; title: Practice Questions
pagenum: 359; title: Practice Projects
pagenum: 359; title: Prettified Stopwatch
pagenum: 360; title: Scheduled Web Comic Downloader
pagenum: 360; label: 16
title: Sending Email and Text Messages
pagenum: 361; title: SMTP
pagenum: 362; title: Sending Email
pagenum: 362; title: Connecting to an SMTP Server
pagenum: 363; title: Sending the SMTP 'Hello' Message
pagenum: 364; title: Starting TLS Encryption
pagenum: 364; title: Logging in to the SMTP Server
pagenum: 364; title: Sending an Email
pagenum: 365; title: Disconnecting from the SMTP Server
pagenum: 366; title: IMAP
pagenum: 366; title: Retrieving and Deleting Emails with IMAP
pagenum: 366; title: Connecting to an IMAP Server
pagenum: 367; title: Logging in to the IMAP Server
pagenum: 368; title: Searching for Email
pagenum: 368; title: Fetching an Email and Marking It As Read
pagenum: 372; title: Getting Email Addresses from a Raw Message
pagenum: 373; title: Getting the Body from a Raw Message
pagenum: 374; title: Deleting Emails
pagenum: 375; title: Disconnecting from the IMAP Server
pagenum: 375; title: Project: Sending Member Dues Reminder Emails
pagenum: 376; title: Step 1: Open the Excel File
pagenum: 376; title: Step 2: Find All Unpaid Members
pagenum: 378; title: Step 3: Send Customized Email Reminders
pagenum: 378; title: Sending Text Messages with Twilio
pagenum: 380; title: Signing Up for a Twilio Account
pagenum: 380; title: Sending Text Messages
pagenum: 381; title: Project: "Just Text Me" Module
pagenum: 383; title: Summary
pagenum: 384; title: Practice Questions
pagenum: 384; title: Practice Projects
pagenum: 385; title: Random Chore Assignment Emailer
pagenum: 385; title: Umbrella Reminder
pagenum: 385; title: Auto Unsubscriber
pagenum: 385; title: Controlling Your Computer Through Email
pagenum: 386; label: 17
title: Manipulating Images
pagenum: 387; title: Computer Image Fundamentals
pagenum: 388; title: Colors and RGBA Values
pagenum: 388; title: Coordinates and Box Tuples
pagenum: 389; title: Manipulating Images with Pillow
pagenum: 390; title: Working with the Image Data Type
pagenum: 392; title: Cropping Images
pagenum: 393; title: Copying and Pasting Images onto Other Images
pagenum: 394; title: Resizing an Image
pagenum: 397; title: Rotating and Flipping Images
pagenum: 398; title: Changing Individual Pixels
pagenum: 400; title: Project: Adding a Logo
pagenum: 401; title: Step 1: Open the Logo Image
pagenum: 401; title: Step 2: Loop Over All Files and Open Images
pagenum: 402; title: Step 3: Resize the Images
pagenum: 403; title: Step 4: Add the Logo and Save the Changes
pagenum: 404; title: Ideas for Similar Programs
pagenum: 406; title: Drawing on Images
pagenum: 406; title: Drawing Shapes
pagenum: 406; title: Drawing Text
pagenum: 408; title: Summary
pagenum: 410; title: Practice Questions
pagenum: 410; title: Practice Projects
pagenum: 411; title: Extending and Fixing the Chapter Project Programs
pagenum: 411; title: Identifying Photo Folders on the Hard Drive
pagenum: 411; title: Custom Seating Cards
pagenum: 412; label: 18
title: Controlling the Keyboard and Mouse with GUI Automation
pagenum: 413; title: Installing the PyAutoGUI Module
pagenum: 414; title: Staying on Track
pagenum: 414; title: Shutting Down Everything by Logging Out
pagenum: 414; title: Pauses and Fail-Safes
pagenum: 415; title: Controlling Mouse Movement
pagenum: 415; title: Moving the Mouse
pagenum: 416; title: Getting the Mouse Position
pagenum: 417; title: Project: "Where Is the Mouse Right Now?"
pagenum: 417; title: Step 1: Import the Module
pagenum: 418; title: Step 2: Set Up the Quit Code and Infinite Loop
pagenum: 418; title: Step 3: Get and Print the Mouse Coordinates
pagenum: 418; title: Controlling Mouse Interaction
pagenum: 419; title: Clicking the Mouse
pagenum: 420; title: Dragging the Mouse
pagenum: 420; title: Scrolling the Mouse
pagenum: 422; title: Working with the Screen
pagenum: 423; title: Getting a Screenshot
pagenum: 423; title: Analyzing the Screenshot
pagenum: 424; title: Project: Extending the mouseNow Program
pagenum: 424; title: Image Recognition
pagenum: 425; title: Controlling the Keyboard
pagenum: 426; title: Sending a String from the Keyboard
pagenum: 426; title: Key Names
pagenum: 427; title: Pressing and Releasing the Keyboard
pagenum: 428; title: Hotkey Combinations
pagenum: 429; title: Review of the PyAutoGUI Functions
pagenum: 430; title: Project: Automatic Form Filler
pagenum: 430; title: Step 1: Figure Out the Steps
pagenum: 432; title: Step 2: Set Up Coordinates
pagenum: 432; title: Step 3: Start Typing Data
pagenum: 434; title: Step 4: Handle Select Lists and Radio Buttons
pagenum: 435; title: Step 5: Submit the Form and Wait
pagenum: 436; title: Summary
pagenum: 437; title: Practice Questions
pagenum: 438; title: Practice Projects
pagenum: 438; title: Looking Busy
pagenum: 438; title: Instant Messenger Bot
pagenum: 438; title: Game-Playing Bot Tutorial
pagenum: 439; label: A
title: Installing Third-Party Modules
pagenum: 441; title: The pip Tool
pagenum: 441; title: Installing Third-Party Modules
pagenum: 442; label: B
title: Running Programs
pagenum: 443; title: Shebang Line
pagenum: 443; title: Running Python Programs on Windows
pagenum: 444; title: Running Python Programs on OS X and Linux
pagenum: 445; title: Running Python Programs with Assertions Disabled
pagenum: 445; label: C
title: Answers to the Practice Questions
pagenum: 447; title: Chapter 1
pagenum: 448; title: Chapter 2
pagenum: 448; title: Chapter 3
pagenum: 450; title: Chapter 4
pagenum: 450; title: Chapter 5
pagenum: 451; title: Chapter 6
pagenum: 451; title: Chapter 7
pagenum: 452; title: Chapter 8
pagenum: 453; title: Chapter 9
pagenum: 453; title: Chapter 10
pagenum: 454; title: Chapter 11
pagenum: 455; title: Chapter 12
pagenum: 456; title: Chapter 13
pagenum: 456; title: Chapter 14
pagenum: 457; title: Chapter 15
pagenum: 457; title: Chapter 16
pagenum: 458; title: Chapter 17
pagenum: 458; title: Chapter 18
pagenum: 458; title: Index
pagenum: 461