If you need help writing programs in Python 3, or want to update older Python 2 code, this book is just the ticket. Packed with practical recipes written and tested with Python 3.3, this unique cookbook is for experienced Python programmers who want to focus on modern tools and idioms.
Inside, you’ll find complete recipes for more than a dozen topics, covering the core Python language as well as tasks common to a wide variety of application domains. Each recipe contains code samples you can use in your projects right away, along with a discussion about how and why the solution works.
Topics include:
- Data Structures and Algorithms
- Strings and Text
- Numbers, Dates, and Times
- Iterators and Generators
- Files and I/O
- Data Encoding and Processing
- Functions
- Classes and Objects
- Metaprogramming
- Modules and Packages
- Network and Web Programming
- Concurrency
- Utility Scripting and System Administration
- Testing, Debugging, and Exceptions
- C Extensions
Author(s): David Beazley, Brian Jones
Edition: 3
Publisher: O'Reilly Media
Year: 2013
Language: English
Pages: 704
Cover
Copyright
Table of Contents
Preface
Who This Book Is For
Who This Book Is Not For
Conventions Used in This Book
Online Code Examples
Using Code Examples
Safari® Books Online
How to Contact Us
Acknowledgments
David Beazley’s Acknowledgments
Brian Jones’ Acknowledgments
Chapter 1. Data Structures and Algorithms
1.1. Unpacking a Sequence into Separate Variables
Problem
Solution
Discussion
1.2. Unpacking Elements from Iterables of Arbitrary Length
Problem
Solution
Discussion
1.3. Keeping the Last N Items
Problem
Solution
Discussion
1.4. Finding the Largest or Smallest N Items
Problem
Solution
Discussion
1.5. Implementing a Priority Queue
Problem
Solution
Discussion
1.6. Mapping Keys to Multiple Values in a Dictionary
Problem
Solution
Discussion
1.7. Keeping Dictionaries in Order
Problem
Solution
Discussion
1.8. Calculating with Dictionaries
Problem
Solution
Discussion
1.9. Finding Commonalities in Two Dictionaries
Problem
Solution
Discussion
1.10. Removing Duplicates from a Sequence while Maintaining Order
Problem
Solution
Discussion
1.11. Naming a Slice
Problem
Solution
Discussion
1.12. Determining the Most Frequently Occurring Items in a Sequence
Problem
Solution
Discussion
1.13. Sorting a List of Dictionaries by a Common Key
Problem
Solution
Discussion
1.14. Sorting Objects Without Native Comparison Support
Problem
Solution
Discussion
1.15. Grouping Records Together Based on a Field
Problem
Solution
Discussion
1.16. Filtering Sequence Elements
Problem
Solution
Discussion
1.17. Extracting a Subset of a Dictionary
Problem
Solution
Discussion
1.18. Mapping Names to Sequence Elements
Problem
Solution
Discussion
1.19. Transforming and Reducing Data at the Same Time
Problem
Solution
Discussion
1.20. Combining Multiple Mappings into a Single Mapping
Problem
Solution
Discussion
Chapter 2. Strings and Text
2.1. Splitting Strings on Any of Multiple Delimiters
Problem
Solution
Discussion
2.2. Matching Text at the Start or End of a String
Problem
Solution
Discussion
2.3. Matching Strings Using Shell Wildcard Patterns
Problem
Solution
Discussion
2.4. Matching and Searching for Text Patterns
Problem
Solution
Discussion
2.5. Searching and Replacing Text
Problem
Solution
Discussion
2.6. Searching and Replacing Case-Insensitive Text
Problem
Solution
Discussion
2.7. Specifying a Regular Expression for the Shortest Match
Problem
Solution
Discussion
2.8. Writing a Regular Expression for Multiline Patterns
Problem
Solution
Discussion
2.9. Normalizing Unicode Text to a Standard Representation
Problem
Solution
Discussion
2.10. Working with Unicode Characters in Regular Expressions
Problem
Solution
Discussion
2.11. Stripping Unwanted Characters from Strings
Problem
Solution
Discussion
2.12. Sanitizing and Cleaning Up Text
Problem
Solution
Discussion
2.13. Aligning Text Strings
Problem
Solution
Discussion
2.14. Combining and Concatenating Strings
Problem
Solution
Discussion
2.15. Interpolating Variables in Strings
Problem
Solution
Discussion
2.16. Reformatting Text to a Fixed Number of Columns
Problem
Solution
Discussion
2.17. Handling HTML and XML Entities in Text
Problem
Solution
Discussion
2.18. Tokenizing Text
Problem
Solution
Discussion
2.19. Writing a Simple Recursive Descent Parser
Problem
Solution
Discussion
2.20. Performing Text Operations on Byte Strings
Problem
Solution
Discussion
Chapter 3. Numbers, Dates, and Times
3.1. Rounding Numerical Values
Problem
Solution
Discussion
3.2. Performing Accurate Decimal Calculations
Problem
Solution
Discussion
3.3. Formatting Numbers for Output
Problem
Solution
Discussion
3.4. Working with Binary, Octal, and Hexadecimal Integers
Problem
Solution
Discussion
3.5. Packing and Unpacking Large Integers from Bytes
Problem
Solution
Discussion
3.6. Performing Complex-Valued Math
Problem
Solution
Discussion
3.7. Working with Infinity and NaNs
Problem
Solution
Discussion
3.8. Calculating with Fractions
Problem
Solution
Discussion
3.9. Calculating with Large Numerical Arrays
Problem
Solution
Discussion
3.10. Performing Matrix and Linear Algebra Calculations
Problem
Solution
Discussion
3.11. Picking Things at Random
Problem
Solution
Discussion
3.12. Converting Days to Seconds, and Other Basic Time Conversions
Problem
Solution
Discussion
3.13. Determining Last Friday’s Date
Problem
Solution
Discussion
3.14. Finding the Date Range for the Current Month
Problem
Solution
Discussion
3.15. Converting Strings into Datetimes
Problem
Solution
Discussion
3.16. Manipulating Dates Involving Time Zones
Problem
Solution
Discussion
Chapter 4. Iterators and Generators
4.1. Manually Consuming an Iterator
Problem
Solution
Discussion
4.2. Delegating Iteration
Problem
Solution
Discussion
4.3. Creating New Iteration Patterns with Generators
Problem
Solution
Discussion
4.4. Implementing the Iterator Protocol
Problem
Solution
Discussion
4.5. Iterating in Reverse
Problem
Solution
Discussion
4.6. Defining Generator Functions with Extra State
Problem
Solution
Discussion
4.7. Taking a Slice of an Iterator
Problem
Solution
Discussion
4.8. Skipping the First Part of an Iterable
Problem
Solution
Discussion
4.9. Iterating Over All Possible Combinations or Permutations
Problem
Solution
Discussion
4.10. Iterating Over the Index-Value Pairs of a Sequence
Problem
Solution
Discussion
4.11. Iterating Over Multiple Sequences Simultaneously
Problem
Solution
Discussion
4.12. Iterating on Items in Separate Containers
Problem
Solution
Discussion
4.13. Creating Data Processing Pipelines
Problem
Solution
Discussion
4.14. Flattening a Nested Sequence
Problem
Solution
Discussion
4.15. Iterating in Sorted Order Over Merged Sorted Iterables
Problem
Solution
Discussion
4.16. Replacing Infinite while Loops with an Iterator
Problem
Solution
Discussion
Chapter 5. Files and I/O
5.1. Reading and Writing Text Data
Problem
Solution
Discussion
5.2. Printing to a File
Problem
Solution
Discussion
5.3. Printing with a Different Separator or Line Ending
Problem
Solution
Discussion
5.4. Reading and Writing Binary Data
Problem
Solution
Discussion
5.5. Writing to a File That Doesn’t Already Exist
Problem
Solution
Discussion
5.6. Performing I/O Operations on a String
Problem
Solution
Discussion
5.7. Reading and Writing Compressed Datafiles
Problem
Solution
Discussion
5.8. Iterating Over Fixed-Sized Records
Problem
Solution
Discussion
5.9. Reading Binary Data into a Mutable Buffer
Problem
Solution
Discussion
5.10. Memory Mapping Binary Files
Problem
Solution
Discussion
5.11. Manipulating Pathnames
Problem
Solution
Discussion
5.12. Testing for the Existence of a File
Problem
Solution
Discussion
5.13. Getting a Directory Listing
Problem
Solution
Discussion
5.14. Bypassing Filename Encoding
Problem
Solution
Discussion
5.15. Printing Bad Filenames
Problem
Solution
Discussion
5.16. Adding or Changing the Encoding of an Already Open File
Problem
Solution
Discussion
5.17. Writing Bytes to a Text File
Problem
Solution
Discussion
5.18. Wrapping an Existing File Descriptor As a File Object
Problem
Solution
Discussion
5.19. Making Temporary Files and Directories
Problem
Solution
Discussion
5.20. Communicating with Serial Ports
Problem
Solution
Discussion
5.21. Serializing Python Objects
Problem
Solution
Discussion
Chapter 6. Data Encoding and Processing
6.1. Reading and Writing CSV Data
Problem
Solution
Discussion
6.2. Reading and Writing JSON Data
Problem
Solution
Discussion
6.3. Parsing Simple XML Data
Problem
Solution
Discussion
6.4. Parsing Huge XML Files Incrementally
Problem
Solution
Discussion
6.5. Turning a Dictionary into XML
Problem
Solution
Discussion
6.6. Parsing, Modifying, and Rewriting XML
Problem
Solution
Discussion
6.7. Parsing XML Documents with Namespaces
Problem
Solution
Discussion
6.8. Interacting with a Relational Database
Problem
Solution
Discussion
6.9. Decoding and Encoding Hexadecimal Digits
Problem
Solution
Discussion
6.10. Decoding and Encoding Base64
Problem
Solution
Discussion
6.11. Reading and Writing Binary Arrays of Structures
Problem
Solution
Discussion
6.12. Reading Nested and Variable-Sized Binary Structures
Problem
Solution
Discussion
6.13. Summarizing Data and Performing Statistics
Problem
Solution
Discussion
Chapter 7. Functions
7.1. Writing Functions That Accept Any Number of Arguments
Problem
Solution
Discussion
7.2. Writing Functions That Only Accept Keyword Arguments
Problem
Solution
Discussion
7.3. Attaching Informational Metadata to Function Arguments
Problem
Solution
Discussion
7.4. Returning Multiple Values from a Function
Problem
Solution
Discussion
7.5. Defining Functions with Default Arguments
Problem
Solution
Discussion
7.6. Defining Anonymous or Inline Functions
Problem
Solution
Discussion
7.7. Capturing Variables in Anonymous Functions
Problem
Solution
Discussion
7.8. Making an N-Argument Callable Work As a Callable with Fewer Arguments
Problem
Solution
Discussion
7.9. Replacing Single Method Classes with Functions
Problem
Solution
Discussion
7.10. Carrying Extra State with Callback Functions
Problem
Solution
Discussion
7.11. Inlining Callback Functions
Problem
Solution
Discussion
7.12. Accessing Variables Defined Inside a Closure
Problem
Solution
Discussion
Chapter 8. Classes and Objects
8.1. Changing the String Representation of Instances
Problem
Solution
Discussion
8.2. Customizing String Formatting
Problem
Solution
Discussion
8.3. Making Objects Support the Context-Management Protocol
Problem
Solution
Discussion
8.4. Saving Memory When Creating a Large Number of Instances
Problem
Solution
Discussion
8.5. Encapsulating Names in a Class
Problem
Solution
Discussion
8.6. Creating Managed Attributes
Problem
Solution
Discussion
8.7. Calling a Method on a Parent Class
Problem
Solution
Discussion
8.8. Extending a Property in a Subclass
Problem
Solution
Discussion
8.9. Creating a New Kind of Class or Instance Attribute
Problem
Solution
Discussion
8.10. Using Lazily Computed Properties
Problem
Solution
Discussion
8.11. Simplifying the Initialization of Data Structures
Problem
Solution
Discussion
8.12. Defining an Interface or Abstract Base Class
Problem
Solution
Discussion
8.13. Implementing a Data Model or Type System
Problem
Solution
Discussion
8.14. Implementing Custom Containers
Problem
Solution
Discussion
8.15. Delegating Attribute Access
Problem
Solution
Discussion
8.16. Defining More Than One Constructor in a Class
Problem
Solution
Discussion
8.17. Creating an Instance Without Invoking init
Problem
Solution
Discussion
8.18. Extending Classes with Mixins
Problem
Solution
Discussion
8.19. Implementing Stateful Objects or State Machines
Problem
Solution
Discussion
8.20. Calling a Method on an Object Given the Name As a String
Problem
Solution
Discussion
8.21. Implementing the Visitor Pattern
Problem
Solution
Discussion
8.22. Implementing the Visitor Pattern Without Recursion
Problem
Solution
Discussion
8.23. Managing Memory in Cyclic Data Structures
Problem
Solution
Discussion
8.24. Making Classes Support Comparison Operations
Problem
Solution
Discussion
8.25. Creating Cached Instances
Problem
Solution
Discussion
Chapter 9. Metaprogramming
9.1. Putting a Wrapper Around a Function
Problem
Solution
Discussion
9.2. Preserving Function Metadata When Writing Decorators
Problem
Solution
Discussion
9.3. Unwrapping a Decorator
Problem
Solution
Discussion
9.4. Defining a Decorator That Takes Arguments
Problem
Solution
Discussion
9.5. Defining a Decorator with User Adjustable Attributes
Problem
Solution
Discussion
9.6. Defining a Decorator That Takes an Optional Argument
Problem
Solution
Discussion
9.7. Enforcing Type Checking on a Function Using a Decorator
Problem
Solution
Discussion
9.8. Defining Decorators As Part of a Class
Problem
Solution
Discussion
9.9. Defining Decorators As Classes
Problem
Solution
Discussion
9.10. Applying Decorators to Class and Static Methods
Problem
Solution
Discussion
9.11. Writing Decorators That Add Arguments to Wrapped Functions
Problem
Solution
Discussion
9.12. Using Decorators to Patch Class Definitions
Problem
Solution
Discussion
9.13. Using a Metaclass to Control Instance Creation
Problem
Solution
Discussion
9.14. Capturing Class Attribute Definition Order
Problem
Solution
Discussion
9.15. Defining a Metaclass That Takes Optional Arguments
Problem
Solution
Discussion
9.16. Enforcing an Argument Signature on *args and **kwargs
Problem
Solution
Discussion
9.17. Enforcing Coding Conventions in Classes
Problem
Solution
Discussion
9.18. Defining Classes Programmatically
Problem
Solution
Discussion
9.19. Initializing Class Members at Definition Time
Problem
Solution
Discussion
9.20. Implementing Multiple Dispatch with Function Annotations
Problem
Solution
Discussion
9.21. Avoiding Repetitive Property Methods
Problem
Solution
Discussion
9.22. Defining Context Managers the Easy Way
Problem
Solution
Discussion
9.23. Executing Code with Local Side Effects
Problem
Solution
Discussion
9.24. Parsing and Analyzing Python Source
Problem
Solution
Discussion
9.25. Disassembling Python Byte Code
Problem
Solution
Discussion
Chapter 10. Modules and Packages
10.1. Making a Hierarchical Package of Modules
Problem
Solution
Discussion
10.2. Controlling the Import of Everything
Problem
Solution
Discussion
10.3. Importing Package Submodules Using Relative Names
Problem
Solution
Discussion
10.4. Splitting a Module into Multiple Files
Problem
Solution
Discussion
10.5. Making Separate Directories of Code Import Under a Common Namespace
Problem
Solution
Discussion
10.6. Reloading Modules
Problem
Solution
Discussion
10.7. Making a Directory or Zip File Runnable As a Main Script
Problem
Solution
Discussion
10.8. Reading Datafiles Within a Package
Problem
Solution
Discussion
10.9. Adding Directories to sys.path
Problem
Solution
Discussion
10.10. Importing Modules Using a Name Given in a String
Problem
Solution
Discussion
10.11. Loading Modules from a Remote Machine Using Import Hooks
Problem
Solution
Discussion
10.12. Patching Modules on Import
Problem
Solution
Discussion
10.13. Installing Packages Just for Yourself
Problem
Solution
Discussion
10.14. Creating a New Python Environment
Problem
Solution
Discussion
10.15. Distributing Packages
Problem
Solution
Discussion
Chapter 11. Network and Web Programming
11.1. Interacting with HTTP Services As a Client
Problem
Solution
Discussion
11.2. Creating a TCP Server
Problem
Solution
Discussion
11.3. Creating a UDP Server
Problem
Solution
Discussion
11.4. Generating a Range of IP Addresses from a CIDR Address
Problem
Solution
Discussion
11.5. Creating a Simple REST-Based Interface
Problem
Solution
Discussion
11.6. Implementing a Simple Remote Procedure Call with XML-RPC
Problem
Solution
Discussion
11.7. Communicating Simply Between Interpreters
Problem
Solution
Discussion
11.8. Implementing Remote Procedure Calls
Problem
Solution
Discussion
11.9. Authenticating Clients Simply
Problem
Solution
Discussion
11.10. Adding SSL to Network Services
Problem
Solution
Discussion
11.11. Passing a Socket File Descriptor Between Processes
Problem
Solution
Discussion
11.12. Understanding Event-Driven I/O
Problem
Solution
Discussion
11.13. Sending and Receiving Large Arrays
Problem
Solution
Discussion
Chapter 12. Concurrency
12.1. Starting and Stopping Threads
Problem
Solution
Discussion
12.2. Determining If a Thread Has Started
Problem
Solution
Discussion
12.3. Communicating Between Threads
Problem
Solution
Discussion
12.4. Locking Critical Sections
Problem
Solution
Discussion
12.5. Locking with Deadlock Avoidance
Problem
Solution
Discussion
12.6. Storing Thread-Specific State
Problem
Solution
Discussion
12.7. Creating a Thread Pool
Problem
Solution
Discussion
12.8. Performing Simple Parallel Programming
Problem
Solution
Discussion
12.9. Dealing with the GIL (and How to Stop Worrying About It)
Problem
Solution
Discussion
12.10. Defining an Actor Task
Problem
Solution
Discussion
12.11. Implementing Publish/Subscribe Messaging
Problem
Solution
Discussion
12.12. Using Generators As an Alternative to Threads
Problem
Solution
Discussion
12.13. Polling Multiple Thread Queues
Problem
Solution
Discussion
12.14. Launching a Daemon Process on Unix
Problem
Solution
Discussion
Chapter 13. Utility Scripting and System Administration
13.1. Accepting Script Input via Redirection, Pipes, or Input Files
Problem
Solution
Discussion
13.2. Terminating a Program with an Error Message
Problem
Solution
Discussion
13.3. Parsing Command-Line Options
Problem
Solution
Discussion
13.4. Prompting for a Password at Runtime
Problem
Solution
Discussion
13.5. Getting the Terminal Size
Problem
Solution
Discussion
13.6. Executing an External Command and Getting Its Output
Problem
Solution
Discussion
13.7. Copying or Moving Files and Directories
Problem
Solution
Discussion
13.8. Creating and Unpacking Archives
Problem
Solution
Discussion
13.9. Finding Files by Name
Problem
Solution
Discussion
13.10. Reading Configuration Files
Problem
Solution
Discussion
13.11. Adding Logging to Simple Scripts
Problem
Solution
Discussion
13.12. Adding Logging to Libraries
Problem
Solution
Discussion
13.13. Making a Stopwatch Timer
Problem
Solution
Discussion
13.14. Putting Limits on Memory and CPU Usage
Problem
Solution
Discussion
13.15. Launching a Web Browser
Problem
Solution
Discussion
Chapter 14. Testing, Debugging, and Exceptions
14.1. Testing Output Sent to stdout
Problem
Solution
Discussion
14.2. Patching Objects in Unit Tests
Problem
Solution
Discussion
14.3. Testing for Exceptional Conditions in Unit Tests
Problem
Solution
Discussion
14.4. Logging Test Output to a File
Problem
Solution
Discussion
14.5. Skipping or Anticipating Test Failures
Problem
Solution
Discussion
14.6. Handling Multiple Exceptions
Problem
Solution
Discussion
14.7. Catching All Exceptions
Problem
Solution
Discussion
14.8. Creating Custom Exceptions
Problem
Solution
Discussion
14.9. Raising an Exception in Response to Another Exception
Problem
Solution
Discussion
14.10. Reraising the Last Exception
Problem
Solution
Discussion
14.11. Issuing Warning Messages
Problem
Solution
Discussion
14.12. Debugging Basic Program Crashes
Problem
Solution
Discussion
14.13. Profiling and Timing Your Program
Problem
Solution
Discussion
14.14. Making Your Programs Run Faster
Problem
Solution
Discussion
Chapter 15. C Extensions
15.1. Accessing C Code Using ctypes
Problem
Solution
Discussion
15.2. Writing a Simple C Extension Module
Problem
Solution
Discussion
15.3. Writing an Extension Function That Operates on Arrays
Problem
Solution
Discussion
15.4. Managing Opaque Pointers in C Extension Modules
Problem
Solution
Discussion
15.5. Defining and Exporting C APIs from Extension Modules
Problem
Solution
Discussion
15.6. Calling Python from C
Problem
Solution
Discussion
15.7. Releasing the GIL in C Extensions
Problem
Solution
Discussion
15.8. Mixing Threads from C and Python
Problem
Solution
Discussion
15.9. Wrapping C Code with Swig
Problem
Solution
Discussion
15.10. Wrapping Existing C Code with Cython
Problem
Solution
Discussion
15.11. Using Cython to Write High-Performance Array Operations
Problem
Solution
Discussion
15.12. Turning a Function Pointer into a Callable
Problem
Solution
Discussion
15.13. Passing NULL-Terminated Strings to C Libraries
Problem
Solution
Discussion
15.14. Passing Unicode Strings to C Libraries
Problem
Solution
Discussion
15.15. Converting C Strings to Python
Problem
Solution
Discussion
15.16. Working with C Strings of Dubious Encoding
Problem
Solution
Discussion
15.17. Passing Filenames to C Extensions
Problem
Solution
Discussion
15.18. Passing Open Files to C Extensions
Problem
Solution
Discussion
15.19. Reading File-Like Objects from C
Problem
Solution
Discussion
15.20. Consuming an Iterable from C
Problem
Solution
Discussion
15.21. Diagnosing Segmentation Faults
Problem
Solution
Discussion
Appendix A. Further Reading
Online Resources
Books for Learning Python
Advanced Books
Index
About the Authors