Navigation

The os module provides dozens of functions for interacting with the
operating system:

>>> importos>>> os.getcwd()# Return the current working directory'C:\\Python33'>>> os.chdir('/server/accesslogs')# Change current working directory>>> os.system('mkdir today')# Run the command mkdir in the system shell0

Be sure to use the importos style instead of fromosimport*. This
will keep os.open() from shadowing the built-in open() function which
operates much differently.

The built-in dir() and help() functions are useful as interactive
aids for working with large modules like os:

>>> importos>>> dir(os)<returns a list of all module functions>>>> help(os)<returns an extensive manual page created from the module's docstrings>

For daily file and directory management tasks, the shutil module provides
a higher level interface that is easier to use:

Common utility scripts often need to process command line arguments. These
arguments are stored in the sys module’s argv attribute as a list. For
instance the following output results from running pythondemo.pyonetwothree at the command line:

>>> importsys>>> print(sys.argv)['demo.py', 'one', 'two', 'three']

The getopt module processes sys.argv using the conventions of the Unix
getopt() function. More powerful and flexible command line processing is
provided by the argparse module.

The datetime module supplies classes for manipulating dates and times in
both simple and complex ways. While date and time arithmetic is supported, the
focus of the implementation is on efficient member extraction for output
formatting and manipulation. The module also supports objects that are timezone
aware.

>>> # dates are easily constructed and formatted>>> fromdatetimeimportdate>>> now=date.today()>>> nowdatetime.date(2003, 12, 2)>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'>>> # dates support calendar arithmetic>>> birthday=date(1964,7,31)>>> age=now-birthday>>> age.days14368

Some Python users develop a deep interest in knowing the relative performance of
different approaches to the same problem. Python provides a measurement tool
that answers those questions immediately.

For example, it may be tempting to use the tuple packing and unpacking feature
instead of the traditional approach to swapping arguments. The timeit
module quickly demonstrates a modest performance advantage:

One approach for developing high quality software is to write tests for each
function as it is developed and to run those tests frequently during the
development process.

The doctest module provides a tool for scanning a module and validating
tests embedded in a program’s docstrings. Test construction is as simple as
cutting-and-pasting a typical call along with its results into the docstring.
This improves the documentation by providing the user with an example and it
allows the doctest module to make sure the code remains true to the
documentation:

The unittest module is not as effortless as the doctest module,
but it allows a more comprehensive set of tests to be maintained in a separate
file:

importunittestclassTestStatisticalFunctions(unittest.TestCase):deftest_average(self):self.assertEqual(average([20,30,70]),40.0)self.assertEqual(round(average([1,5,7]),1),4.3)withself.assertRaises(ZeroDivisionError):average([])withself.assertRaises(TypeError):average(20,30,70)unittest.main()# Calling from the command line invokes all tests

Python has a “batteries included” philosophy. This is best seen through the
sophisticated and robust capabilities of its larger packages. For example:

The xmlrpc.client and xmlrpc.server modules make implementing
remote procedure calls into an almost trivial task. Despite the modules
names, no direct knowledge or handling of XML is needed.

The email package is a library for managing email messages, including
MIME and other RFC 2822-based message documents. Unlike smtplib and
poplib which actually send and receive messages, the email package has
a complete toolset for building or decoding complex message structures
(including attachments) and for implementing internet encoding and header
protocols.

The xml.dom and xml.sax packages provide robust support for
parsing this popular data interchange format. Likewise, the csv module
supports direct reads and writes in a common database format. Together, these
modules and packages greatly simplify data interchange between Python
applications and other tools.

Internationalization is supported by a number of modules including
gettext, locale, and the codecs package.