Python Cookbook |
By Alex Martelli, David Ascher |
| |
Publisher | : O'Reilly |
Pub Date | : July 2002 |
ISBN | : 0-596-00167-3 |
Pages | : 606 |
| Copyright |
| | Foreword |
| | Preface |
| | | The Design of the Book |
| | | The Implementation of the Book |
| | | A Note About Licenses |
| | | Audience |
| | | Organization |
| | | Further Reading |
| | | Conventions Used in This Book |
| | | How to Contact Us |
| | | Acknowledgments |
|
| | Chapter 1. Python Shortcuts |
| | | Section 1.1. Introduction |
| | | Section 1.2. Swapping Values WithoutUsing a Temporary Variable |
| | | Section 1.3. Constructing a Dictionary Without Excessive Quoting |
| | | Section 1.4. Getting a Value from a Dictionary |
| | | Section 1.5. Adding an Entry to a Dictionary |
| | | Section 1.6. Associating Multiple Values with Each Key in a Dictionary |
| | | Section 1.7. Dispatching Using a Dictionary |
| | | Section 1.8. Collecting a Bunch of Named Items |
| | | Section 1.9. Finding the Intersection of Two Dictionaries |
| | | Section 1.10. Assigning and Testing with One Statement |
| | | Section 1.11. Using List Comprehensions Instead of map and filter |
| | | Section 1.12. Unzipping Simple List-Like Objects |
| | | Section 1.13. Flattening a Nested Sequence |
| | | Section 1.14. Looping in Parallel over Index and Sequence Items |
| | | Section 1.15. Looping Through Multiple Lists |
| | | Section 1.16. Spanning a Range Defined by Floats |
| | | Section 1.17. Transposing Two-Dimensional Arrays |
| | | Section 1.18. Creating Lists of Lists Without Sharing References |
|
| | Chapter 2. Searching and Sorting |
| | | Section 2.1. Introduction |
| | | Section 2.2. Sorting a Dictionary |
| | | Section 2.3. Processing Selected Pairs of Structured Data Efficiently |
| | | Section 2.4. Sorting While Guaranteeing Sort Stability |
| | | Section 2.5. Sorting by One Field, Then by Another |
| | | Section 2.6. Looking for Items in a Sorted Sequence Using Binary Search |
| | | Section 2.7. Sorting a List of Objects by an Attribute of the Objects |
| | | Section 2.8. Sorting by Item or by Attribute |
| | | Section 2.9. Selecting Random Elements from a List Without Repetition |
| | | Section 2.10. Performing Frequent Membership Tests on a Sequence |
| | | Section 2.11. Finding the Deep Index of an Item in an Embedded Sequence |
| | | Section 2.12. Showing Off Quicksort in Three Lines |
| | | Section 2.13. Sorting Objects Using SQL's ORDER BY Syntax |
|
| | Chapter 3. Text |
| | | Section 3.1. Introduction |
| | | Section 3.2. Processing a String One Character at a Time |
| | | Section 3.3. Testing if an Object Is String-Like |
| | | Section 3.4. Aligning Strings |
| | | Section 3.5. Trimming Space from the Ends of a String |
| | | Section 3.6. Combining Strings |
| | | Section 3.7. Checking Whether a String Contains a Set of Characters |
| | | Section 3.8. Filtering a String for a Set of Characters |
| | | Section 3.9. Controlling Case |
| | | Section 3.10. Reversing a String by Words or Characters |
| | | Section 3.11. Accessing Substrings |
| | | Section 3.12. Changing the Indentation of a Multiline String |
| | | Section 3.13. Testing Whether a String Represents an Integer |
| | | Section 3.14. Expanding and Compressing Tabs |
| | | Section 3.15. Replacing Multiple Patterns in a Single Pass |
| | | Section 3.16. Converting Between Different Naming Conventions |
| | | Section 3.17. Converting Between Characters and Values |
| | | Section 3.18. Converting Between Unicode and Plain Strings |
| | | Section 3.19. Printing Unicode Characters to Standard Output |
| | | Section 3.20. Dispatching Based on Pattern Matches |
| | | Section 3.21. Evaluating Code Inside Strings |
| | | Section 3.22. Replacing Python Code with the Results of Executing That Code |
| | | Section 3.23. Module: Yet Another Python Templating Utility (YAPTU) |
| | | Section 3.24. Module: Roman Numerals |
|
| | Chapter 4. Files |
| | | Section 4.1. Introduction |
| | | Section 4.2. Reading from a File |
| | | Section 4.3. Writing to a File |
| | | Section 4.4. Searching and Replacing Text in a File |
| | | Section 4.5. Reading a Particular Line from a File |
| | | Section 4.6. Retrieving a Line at Random from a File of Unknown Size |
| | | Section 4.7. Counting Lines in a File |
| | | Section 4.8. Processing Every Word in a File |
| | | Section 4.9. Reading a Text File by Paragraphs |
| | | Section 4.10. Reading Lines with Continuation Characters |
| | | Section 4.11. Reading Data from ZIP Files |
| | | Section 4.12. Reading INI Configuration Files |
| | | Section 4.13. Sending Binary Data to Standard Output Under Windows |
| | | Section 4.14. Using Random-Access Input/Output |
| | | Section 4.15. Updating a Random-Access File |
| | | Section 4.16. Splitting a Path into All of Its Parts |
| | | Section 4.17. Treating Pathnames as Objects |
| | | Section 4.18. Creating Directories Including Necessary Parent Directories |
| | | Section 4.19. Walking Directory Trees |
| | | Section 4.20. Swapping One File Extension for Another Throughout a Directory Tree |
| | | Section 4.21. Finding a File Given an Arbitrary Search Path |
| | | Section 4.22. Finding a File on the Python Search Path |
| | | Section 4.23. Dynamically Changing the Python Search Path |
| | | Section 4.24. Computing Directory Sizes in a Cross-Platform Way |
| | | Section 4.25. File Locking Using a Cross-Platform API |
| | | Section 4.26. Versioning Filenames |
| | | Section 4.27. Module: Versioned Backups |
|
| | Chapter 5. Object-Oriented Programming |
| | | Section 5.1. Introduction |
| | | Section 5.2. Overriding a Built-In Method |
| | | Section 5.3. Getting All Members of a Class Hierarchy |
| | | Section 5.4. Calling a Superclass _ _init_ _ Method if It Exists |
| | | Section 5.5. Calling a Superclass Implementation of a Method |
| | | Section 5.6. Implementing Properties |
| | | Section 5.7. Implementing Static Methods |
| | | Section 5.8. Implementing Class Methods |
| | | Section 5.9. Delegating Automatically as an Alternative to Inheritance |
| | | Section 5.10. Decorating an Object with Print-Like Methods |
| | | Section 5.11. Checking if an Object Has Necessary Attributes |
| | | Section 5.12. Making a Fast Copy of an Object |
| | | Section 5.13. Adding Methods to a Class at Runtime |
| | | Section 5.14. Modifying the Class Hierarchy of an Instance |
| | | Section 5.15. Keeping References to Bound Methods Without Inhibiting Garbage Collection |
| | | Section 5.16. Defining Constants |
| | | Section 5.17. Managing Options |
| | | Section 5.18. Implementing a Set Class |
| | | Section 5.19. Implementing a Ring Buffer |
| | | Section 5.20. Implementing a Collection |
| | | Section 5.21. Delegating Messages to Multiple Objects |
| | | Section 5.22. Implementing the Singleton Design Pattern |
| | | Section 5.23. Avoiding the Singleton Design Pattern with the Borg Idiom |
| | | Section 5.24. Implementing the Null Object Design Pattern |
|
| | Chapter 6. Threads, Processes, and Synchronization |
| | | Section 6.1. Introduction |
| | | Section 6.2. Storing Per-Thread Information |
| | | Section 6.3. Terminating a Thread |
| | | Section 6.4. Allowing Multithreaded Read Access While Maintaining a Write Lock |
| | | Section 6.5. Running Functions in the Future |
| | | Section 6.6. Synchronizing All Methods in an Object |
| | | Section 6.7. Capturing the Output and Error Streams from a Unix Shell Command |
| | | Section 6.8. Forking a Daemon Process on Unix |
| | | Section 6.9. Determining if Another Instance of a Script Is Already Running in Windows |
| | | Section 6.10. Processing Windows Messages Using MsgWaitForMultipleObjects |
|
| | Chapter 7. System Administration |
| | | Section 7.1. Introduction |
| | | Section 7.2. Running a Command Repeatedly |
| | | Section 7.3. Generating Random Passwords |
| | | Section 7.4. Generating Non-Totally Random Passwords |
| | | Section 7.5. Checking the Status of a Unix Network Interface |
| | | Section 7.6. Calculating Apache Hits per IP Address |
| | | Section 7.7. Calculating the Rate of Client Cache Hits on Apache |
| | | Section 7.8. Manipulating the Environment on Windows NT/2000/XP |
| | | Section 7.9. Checking and Modifying the Set of Tasks Windows Automatically Runs at Logon |
| | | Section 7.10. Examining the Microsoft Windows Registry for a List of Name Server Addresses |
| | | Section 7.11. Getting Information About the Current User on Windows NT/2000 |
| | | Section 7.12. Getting the Windows Service Name from Its Long Name |
| | | Section 7.13. Manipulating Windows Services |
| | | Section 7.14. Impersonating Principals on Windows |
| | | Section 7.15. Changing a Windows NT Password Using ADSI |
| | | Section 7.16. Working with Windows Scripting Host (WSH) from Python |
| | | Section 7.17. Displaying Decoded Hotkeys for Shortcuts in Windows |
|
| | Chapter 8. Databases and Persistence |
| | | Section 8.1. Introduction |
| | | Section 8.2. Serializing Data Using the marshal Module |
| | | Section 8.3. Serializing Data Using the pickle and cPickle Modules |
| | | Section 8.4. Using the cPickle Module on Classes and Instances |
| | | Section 8.5. Mutating Objects with shelve |
| | | Section 8.6. Accesssing a MySQL Database |
| | | Section 8.7. Storing a BLOB in a MySQL Database |
| | | Section 8.8. Storing a BLOB in a PostgreSQL Database |
| | | Section 8.9. Generating a Dictionary Mapping from Field Names to Column Numbers |
| | | Section 8.10. Using dtuple for Flexible Access to Query Results |
| | | Section 8.11. Pretty-Printing the Contents of Database Cursors |
| | | Section 8.12. Establishing Database Connections Lazily |
| | | Section 8.13. Accessing a JDBC Database from a Jython Servlet |
| | | Section 8.14. Module: jet2sql Creating a SQL DDL from an Access Database |
|
| | Chapter 9. User Interfaces |
| | | Section 9.1. Introduction |
| | | Section 9.2. Avoiding lambda in Writing Callback Functions |
| | | Section 9.3. Creating Menus with Tkinter |
| | | Section 9.4. Creating Dialog Boxes with Tkinter |
| | | Section 9.5. Supporting Multiple Values per Row in a Tkinter Listbox |
| | | Section 9.6. Embedding Inline GIFs Using Tkinter |
| | | Section 9.7. Combining Tkinter and Asynchronous I/O with Threads |
| | | Section 9.8. Using a wxPython Notebook with Panels |
| | | Section 9.9. Giving the User Unobtrusive Feedback During Data Entry with Qt |
| | | Section 9.10. Building GUI Solutions Independent of the Specific GUI Toolkit |
| | | Section 9.11. Creating Color Scales |
| | | Section 9.12. Using Publish/Subscribe Broadcasting to Loosen the Coupling Between GUI and Business Logic Systems |
| | | Section 9.13. Module: Building GTK GUIs Interactively |
|
| | Chapter 10. Network Programming |
| | | Section 10.1. Introduction |
| | | Section 10.2. Writing a TCP Client |
| | | Section 10.3. Writing a TCP Server |
| | | Section 10.4. Passing Messages with Socket Datagrams |
| | | Section 10.5. Finding Your Own Name and Address |
| | | Section 10.6. Converting IP Addresses |
| | | Section 10.7. Grabbing a Document from the Web |
| | | Section 10.8. Being an FTP Client |
| | | Section 10.9. Sending HTML Mail |
| | | Section 10.10. Sending Multipart MIME Email |
| | | Section 10.11. Bundling Files in a MIME Message |
| | | Section 10.12. Unpacking a Multipart MIME Message |
| | | Section 10.13. Module: PyHeartBeat Detecting Inactive Computers |
| | | Section 10.14. Module: Interactive POP3 Mailbox Inspector |
| | | Section 10.15. Module: Watching for New IMAP Mail Using a GUI |
|
| | Chapter 11. Web Programming |
| | | Section 11.1. Introduction |
| | | Section 11.2. Testing Whether CGI Is Working |
| | | Section 11.3. Writing a CGI Script |
| | | Section 11.4. Using a Simple Dictionary for CGI Parameters |
| | | Section 11.5. Handling URLs Within a CGI Script |
| | | Section 11.6. Resuming the HTTP Download of a File |
| | | Section 11.7. Stripping Dangerous Tags and Javascript from HTML |
| | | Section 11.8. Running a Servlet with Jython |
| | | Section 11.9. Accessing Netscape Cookie Information |
| | | Section 11.10. Finding an Internet Explorer Cookie |
| | | Section 11.11. Module: Fetching Latitude/Longitude Data from the Web |
|
| | Chapter 12. Processing XML |
| | | Section 12.1. Introduction |
| | | Section 12.2. Checking XML Well-Formedness |
| | | Section 12.3. Counting Tags in a Document |
| | | Section 12.4. Extracting Text from an XML Document |
| | | Section 12.5. Transforming an XML Document Using XSLT |
| | | Section 12.6. Transforming an XML Document Using Python |
| | | Section 12.7. Parsing an XML File with xml.parsers.expat |
| | | Section 12.8. Converting Ad-Hoc Text into XML Markup |
| | | Section 12.9. Normalizing an XML Document |
| | | Section 12.10. Controlling XSLT Stylesheet Loading |
| | | Section 12.11. Autodetecting XML Encoding |
| | | Section 12.12. Module: XML Lexing (Shallow Parsing) |
| | | Section 12.13. Module: Converting a List of Equal-Length Lists into XML |
|
| | Chapter 13. Distributed Programming |
| | | Section 13.1. Introduction |
| | | Section 13.2. Making an XML-RPC Method Call |
| | | Section 13.3. Serving XML-RPC Requests |
| | | Section 13.4. Using XML-RPC with Medusa |
| | | Section 13.5. Writing a Web Service That Supports Both XML-RPC and SOAP |
| | | Section 13.6. Implementing a CORBA Client and Server |
| | | Section 13.7. Performing Remote Logins Using telnetlib |
| | | Section 13.8. Using Publish/Subscribe in a Distributed Middleware Architecture |
| | | Section 13.9. Using Request/Reply in a Distributed Middleware Architecture |
|
| | Chapter 14. Debugging and Testing |
| | | Section 14.1. Introduction |
| | | Section 14.2. Reloading All Loaded Modules |
| | | Section 14.3. Tracing Expressions and Comments in Debug Mode |
| | | Section 14.4. Wrapping Tracebacks in HTML |
| | | Section 14.5. Getting More Information from Tracebacks |
| | | Section 14.6. Starting the Debugger Automatically After an Uncaught Exception |
| | | Section 14.7. Logging and Tracing Across Platforms |
| | | Section 14.8. Determining the Name of the Current Function |
| | | Section 14.9. Introspecting the Call Stack with Older Versions of Python |
| | | Section 14.10. Debugging the Garbage-Collection Process |
| | | Section 14.11. Tracking Instances of Particular Classes |
|
| | Chapter 15. Programs About Programs |
| | | Section 15.1. Introduction |
| | | Section 15.2. Colorizing Python Source Using the Built-in Tokenizer |
| | | Section 15.3. Importing a Dynamically Generated Module |
| | | Section 15.4. Importing from a Module Whose Name Is Determined at Runtime |
| | | Section 15.5. Importing Modules with Automatic End-of-Line Conversions |
| | | Section 15.6. Simulating Enumerations in Python |
| | | Section 15.7. Modifying Methods in Place |
| | | Section 15.8. Associating Parameters with a Function (Currying) |
| | | Section 15.9. Composing Functions |
| | | Section 15.10. Adding Functionality to a Class |
| | | Section 15.11. Adding a Method to a Class Instance at Runtime |
| | | Section 15.12. Defining a Custom Metaclass to Control Class Behavior |
| | | Section 15.13. Module: Allowing the Python Profiler to Profile C Modules |
|
| | Chapter 16. Extending and Embedding |
| | | Section 16.1. Introduction |
| | | Section 16.2. Implementing a Simple Extension Type |
| | | Section 16.3. Translating a Python Sequence into a C Array with the PySequence_Fast Protocol |
| | | Section 16.4. Accessing a Python Sequence Item-by-Item with the Iterator Protocol |
| | | Section 16.5. Returning None from a Python-Callable C Function |
| | | Section 16.6. Coding the Methods of a Python Class in C |
| | | Section 16.7. Implementing C Function Callbacks to a Python Function |
| | | Section 16.8. Debugging Dynamically Loaded C Extensions with gdb |
| | | Section 16.9. Debugging Memory Problems |
| | | Section 16.10. Using SWIG-Generated Modules in a Multithreaded Environment |
|
| | Chapter 17. Algorithms |
| | | Section 17.1. Introduction |
| | | Section 17.2. Testing if a Variable Is Defined |
| | | Section 17.3. Evaluating Predicate Tests Across Sequences |
| | | Section 17.4. Removing Duplicates from a Sequence |
| | | Section 17.5. Removing Duplicates from a Sequence While Maintaining Sequence Order |
| | | Section 17.6. Simulating the Ternary Operator in Python |
| | | Section 17.7. Counting Items and Sorting by Incidence (Histograms) |
| | | Section 17.8. Memoizing (Caching) the Return Values of Functions |
| | | Section 17.9. Looking Up Words by Sound Similarity |
| | | Section 17.10. Computing Factorials with lambda |
| | | Section 17.11. Generating the Fibonacci Sequence |
| | | Section 17.12. Wrapping an Unbounded Iterator to Restrict Its Output |
| | | Section 17.13. Operating on Iterators |
| | | Section 17.14. Rolling Dice |
| | | Section 17.15. Implementing a First-In First-Out Container |
| | | Section 17.16. Modeling a Priority Queue |
| | | Section 17.17. Converting Numbers to Rationals via Farey Fractions |
| | | Section 17.18. Evaluating a Polynomial |
| | | Section 17.19. Module: Finding the Convex Hull of a Set of 2D Points |
| | | Section 17.20. Module: Parsing a String into a Date/Time Object Portably |
|
| | Chapter 16. List of Contributors |
| | | Section 18.1. A |
| | | Section 18.2. B |
| | | Section 18.3. C |
| | | Section 18.4. D |
| | | Section 18.5. F |
| | | Section 18.6. G |
| | | Section 18.7. H |
| | | Section 18.8. J |
| | | Section 18.9. K |
| | | Section 18.10. L |
| | | Section 18.11. M |
| | | Section 18.12. N |
| | | Section 18.13. P |
| | | Section 18.14. Q |
| | | Section 18.15. R |
| | | Section 18.16. S |
| | | Section 18.17. T |
| | | Section 18.18. U |
| | | Section 18.19. V |
| | | Section 18.20. W |
| | | Section 18.21. Y |
| | | Section 18.22. Z |
|
| | Colophon |
| | Index |