blob: 87f2cf32c2cf3863add74e5c808e297c3e6aa8cc [file] [log] [blame]
Antoine Pitrou37dc5f82011-04-03 17:05:46 +02001:mod:`bz2` --- Support for :program:`bzip2` compression
2=======================================================
Georg Brandl116aa622007-08-15 14:28:22 +00003
4.. module:: bz2
Antoine Pitrou37dc5f82011-04-03 17:05:46 +02005 :synopsis: Interfaces for bzip2 compression and decompression.
Georg Brandl116aa622007-08-15 14:28:22 +00006.. moduleauthor:: Gustavo Niemeyer <niemeyer@conectiva.com>
Antoine Pitrou37dc5f82011-04-03 17:05:46 +02007.. moduleauthor:: Nadeem Vawda <nadeem.vawda@gmail.com>
Georg Brandl116aa622007-08-15 14:28:22 +00008.. sectionauthor:: Gustavo Niemeyer <niemeyer@conectiva.com>
Antoine Pitrou37dc5f82011-04-03 17:05:46 +02009.. sectionauthor:: Nadeem Vawda <nadeem.vawda@gmail.com>
Georg Brandl116aa622007-08-15 14:28:22 +000010
11
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020012This module provides a comprehensive interface for compressing and
13decompressing data using the bzip2 compression algorithm.
Georg Brandl116aa622007-08-15 14:28:22 +000014
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020015For related file formats, see the :mod:`gzip`, :mod:`zipfile`, and
Guido van Rossum77677112007-11-05 19:43:04 +000016:mod:`tarfile` modules.
17
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020018The :mod:`bz2` module contains:
Georg Brandl116aa622007-08-15 14:28:22 +000019
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020020* The :class:`BZ2File` class for reading and writing compressed files.
21* The :class:`BZ2Compressor` and :class:`BZ2Decompressor` classes for
22 incremental (de)compression.
23* The :func:`compress` and :func:`decompress` functions for one-shot
24 (de)compression.
Georg Brandl116aa622007-08-15 14:28:22 +000025
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020026All of the classes in this module may safely be accessed from multiple threads.
Georg Brandl116aa622007-08-15 14:28:22 +000027
28
29(De)compression of files
30------------------------
31
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020032.. class:: BZ2File(filename=None, mode='r', buffering=None, compresslevel=9, fileobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +000033
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020034 Open a bzip2-compressed file.
Georg Brandl116aa622007-08-15 14:28:22 +000035
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020036 The :class:`BZ2File` can wrap an existing :term:`file object` (given by
37 *fileobj*), or operate directly on a named file (named by *filename*).
38 Exactly one of these two parameters should be provided.
Georg Brandl116aa622007-08-15 14:28:22 +000039
Nadeem Vawda200e00a2011-05-27 01:52:16 +020040 The *mode* argument can be either ``'r'`` for reading (default), ``'w'`` for
41 overwriting, or ``'a'`` for appending. If *fileobj* is provided, a mode of
42 ``'w'`` does not truncate the file, and is instead equivalent to ``'a'``.
Georg Brandl116aa622007-08-15 14:28:22 +000043
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020044 The *buffering* argument is ignored. Its use is deprecated.
45
Nadeem Vawda200e00a2011-05-27 01:52:16 +020046 If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be a number between
47 ``1`` and ``9`` specifying the level of compression: ``1`` produces the
48 least compression, and ``9`` (default) produces the most compression.
49
50 If *mode* is ``'r'``, the input file may be the concatenation of multiple
51 compressed streams.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020052
53 :class:`BZ2File` provides all of the members specified by the
54 :class:`io.BufferedIOBase`, except for :meth:`detach` and :meth:`truncate`.
55 Iteration and the :keyword:`with` statement are supported.
56
57 :class:`BZ2File` also provides the following method:
58
59 .. method:: peek([n])
60
61 Return buffered data without advancing the file position. At least one
62 byte of data will be returned (unless at EOF). The exact number of bytes
63 returned is unspecified.
64
65 .. versionadded:: 3.3
Benjamin Petersone0124bd2009-03-09 21:04:33 +000066
Benjamin Peterson10745a92009-03-09 21:08:47 +000067 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +000068 Support for the :keyword:`with` statement was added.
69
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020070 .. versionchanged:: 3.3
71 The :meth:`fileno`, :meth:`readable`, :meth:`seekable`, :meth:`writable`,
72 :meth:`read1` and :meth:`readinto` methods were added.
Georg Brandl116aa622007-08-15 14:28:22 +000073
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020074 .. versionchanged:: 3.3
75 The *fileobj* argument to the constructor was added.
Georg Brandl116aa622007-08-15 14:28:22 +000076
Nadeem Vawda200e00a2011-05-27 01:52:16 +020077 .. versionchanged:: 3.3
78 The ``'a'`` (append) mode was added, along with support for reading
79 multi-stream files.
80
Georg Brandl116aa622007-08-15 14:28:22 +000081
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020082Incremental (de)compression
83---------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000084
Georg Brandl0d8f0732009-04-05 22:20:44 +000085.. class:: BZ2Compressor(compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000086
87 Create a new compressor object. This object may be used to compress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020088 incrementally. For one-shot compression, use the :func:`compress` function
89 instead.
90
91 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
92 default is ``9``.
Georg Brandl116aa622007-08-15 14:28:22 +000093
Benjamin Petersone41251e2008-04-25 01:59:09 +000094 .. method:: compress(data)
Georg Brandl116aa622007-08-15 14:28:22 +000095
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020096 Provide data to the compressor object. Returns a chunk of compressed data
97 if possible, or an empty byte string otherwise.
98
99 When you have finished providing data to the compressor, call the
100 :meth:`flush` method to finish the compression process.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102
Benjamin Petersone41251e2008-04-25 01:59:09 +0000103 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000104
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200105 Finish the compression process. Returns the compressed data left in
106 internal buffers.
107
108 The compressor object may not be used after this method has been called.
Georg Brandl116aa622007-08-15 14:28:22 +0000109
110
111.. class:: BZ2Decompressor()
112
113 Create a new decompressor object. This object may be used to decompress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200114 incrementally. For one-shot compression, use the :func:`decompress` function
115 instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000116
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200117 .. note::
118 This class does not transparently handle inputs containing multiple
119 compressed streams, unlike :func:`decompress` and :class:`BZ2File`. If
120 you need to decompress a multi-stream input with :class:`BZ2Decompressor`,
121 you must use a new decompressor for each stream.
122
Benjamin Petersone41251e2008-04-25 01:59:09 +0000123 .. method:: decompress(data)
Georg Brandl116aa622007-08-15 14:28:22 +0000124
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200125 Provide data to the decompressor object. Returns a chunk of decompressed
126 data if possible, or an empty byte string otherwise.
127
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200128 Attempting to decompress data after the end of the current stream is
129 reached raises an :exc:`EOFError`. If any data is found after the end of
130 the stream, it is ignored and saved in the :attr:`unused_data` attribute.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200131
132
133 .. attribute:: eof
134
135 True if the end-of-stream marker has been reached.
136
137 .. versionadded:: 3.3
138
139
140 .. attribute:: unused_data
141
142 Data found after the end of the compressed stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000143
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200144 If this attribute is accessed before the end of the stream has been
145 reached, its value will be ``b''``.
146
Georg Brandl116aa622007-08-15 14:28:22 +0000147
148One-shot (de)compression
149------------------------
150
Georg Brandl0d8f0732009-04-05 22:20:44 +0000151.. function:: compress(data, compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200153 Compress *data*.
154
155 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
156 default is ``9``.
157
158 For incremental compression, use a :class:`BZ2Compressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000159
160
161.. function:: decompress(data)
162
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200163 Decompress *data*.
164
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200165 If *data* is the concatenation of multiple compressed streams, decompress
166 all of the streams.
167
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200168 For incremental decompression, use a :class:`BZ2Decompressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000169
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200170 .. versionchanged:: 3.3
171 Support for multi-stream inputs was added.
172