blob: de5c825b9c8bc015ea7cd99ea6e3c1785d6e2b82 [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 +020015The :mod:`bz2` module contains:
Georg Brandl116aa622007-08-15 14:28:22 +000016
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020017* The :class:`BZ2File` class for reading and writing compressed files.
18* The :class:`BZ2Compressor` and :class:`BZ2Decompressor` classes for
19 incremental (de)compression.
20* The :func:`compress` and :func:`decompress` functions for one-shot
21 (de)compression.
Georg Brandl116aa622007-08-15 14:28:22 +000022
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020023All of the classes in this module may safely be accessed from multiple threads.
Georg Brandl116aa622007-08-15 14:28:22 +000024
25
26(De)compression of files
27------------------------
28
Nadeem Vawdaaebcdba2012-06-04 23:31:20 +020029.. class:: BZ2File(filename, mode='r', buffering=None, compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000030
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020031 Open a bzip2-compressed file.
Georg Brandl116aa622007-08-15 14:28:22 +000032
Nadeem Vawdaaebcdba2012-06-04 23:31:20 +020033 If *filename* is a :class:`str` or :class:`bytes` object, open the named file
34 directly. Otherwise, *filename* should be a :term:`file object`, which will
35 be used to read or write the compressed data.
Georg Brandl116aa622007-08-15 14:28:22 +000036
Nadeem Vawda200e00a2011-05-27 01:52:16 +020037 The *mode* argument can be either ``'r'`` for reading (default), ``'w'`` for
Nadeem Vawdaaebcdba2012-06-04 23:31:20 +020038 overwriting, or ``'a'`` for appending. If *filename* is a file object (rather
39 than an actual file name), a mode of ``'w'`` does not truncate the file, and
40 is instead equivalent to ``'a'``.
Georg Brandl116aa622007-08-15 14:28:22 +000041
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020042 The *buffering* argument is ignored. Its use is deprecated.
43
Nadeem Vawda200e00a2011-05-27 01:52:16 +020044 If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be a number between
45 ``1`` and ``9`` specifying the level of compression: ``1`` produces the
46 least compression, and ``9`` (default) produces the most compression.
47
48 If *mode* is ``'r'``, the input file may be the concatenation of multiple
49 compressed streams.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020050
51 :class:`BZ2File` provides all of the members specified by the
52 :class:`io.BufferedIOBase`, except for :meth:`detach` and :meth:`truncate`.
53 Iteration and the :keyword:`with` statement are supported.
54
55 :class:`BZ2File` also provides the following method:
56
57 .. method:: peek([n])
58
59 Return buffered data without advancing the file position. At least one
60 byte of data will be returned (unless at EOF). The exact number of bytes
61 returned is unspecified.
62
63 .. versionadded:: 3.3
Benjamin Petersone0124bd2009-03-09 21:04:33 +000064
Benjamin Peterson10745a92009-03-09 21:08:47 +000065 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +000066 Support for the :keyword:`with` statement was added.
67
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020068 .. versionchanged:: 3.3
69 The :meth:`fileno`, :meth:`readable`, :meth:`seekable`, :meth:`writable`,
70 :meth:`read1` and :meth:`readinto` methods were added.
Georg Brandl116aa622007-08-15 14:28:22 +000071
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020072 .. versionchanged:: 3.3
Nadeem Vawdaaebcdba2012-06-04 23:31:20 +020073 Support was added for *filename* being a :term:`file object` instead of an
74 actual filename.
Georg Brandl116aa622007-08-15 14:28:22 +000075
Nadeem Vawda200e00a2011-05-27 01:52:16 +020076 .. versionchanged:: 3.3
77 The ``'a'`` (append) mode was added, along with support for reading
78 multi-stream files.
79
Georg Brandl116aa622007-08-15 14:28:22 +000080
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020081Incremental (de)compression
82---------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000083
Georg Brandl0d8f0732009-04-05 22:20:44 +000084.. class:: BZ2Compressor(compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000085
86 Create a new compressor object. This object may be used to compress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020087 incrementally. For one-shot compression, use the :func:`compress` function
88 instead.
89
90 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
91 default is ``9``.
Georg Brandl116aa622007-08-15 14:28:22 +000092
Benjamin Petersone41251e2008-04-25 01:59:09 +000093 .. method:: compress(data)
Georg Brandl116aa622007-08-15 14:28:22 +000094
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020095 Provide data to the compressor object. Returns a chunk of compressed data
96 if possible, or an empty byte string otherwise.
97
98 When you have finished providing data to the compressor, call the
99 :meth:`flush` method to finish the compression process.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
101
Benjamin Petersone41251e2008-04-25 01:59:09 +0000102 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000103
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200104 Finish the compression process. Returns the compressed data left in
105 internal buffers.
106
107 The compressor object may not be used after this method has been called.
Georg Brandl116aa622007-08-15 14:28:22 +0000108
109
110.. class:: BZ2Decompressor()
111
112 Create a new decompressor object. This object may be used to decompress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200113 incrementally. For one-shot compression, use the :func:`decompress` function
114 instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000115
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200116 .. note::
117 This class does not transparently handle inputs containing multiple
118 compressed streams, unlike :func:`decompress` and :class:`BZ2File`. If
119 you need to decompress a multi-stream input with :class:`BZ2Decompressor`,
120 you must use a new decompressor for each stream.
121
Benjamin Petersone41251e2008-04-25 01:59:09 +0000122 .. method:: decompress(data)
Georg Brandl116aa622007-08-15 14:28:22 +0000123
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200124 Provide data to the decompressor object. Returns a chunk of decompressed
125 data if possible, or an empty byte string otherwise.
126
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200127 Attempting to decompress data after the end of the current stream is
128 reached raises an :exc:`EOFError`. If any data is found after the end of
129 the stream, it is ignored and saved in the :attr:`unused_data` attribute.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200130
131
132 .. attribute:: eof
133
134 True if the end-of-stream marker has been reached.
135
136 .. versionadded:: 3.3
137
138
139 .. attribute:: unused_data
140
141 Data found after the end of the compressed stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000142
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200143 If this attribute is accessed before the end of the stream has been
144 reached, its value will be ``b''``.
145
Georg Brandl116aa622007-08-15 14:28:22 +0000146
147One-shot (de)compression
148------------------------
149
Georg Brandl0d8f0732009-04-05 22:20:44 +0000150.. function:: compress(data, compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200152 Compress *data*.
153
154 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
155 default is ``9``.
156
157 For incremental compression, use a :class:`BZ2Compressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000158
159
160.. function:: decompress(data)
161
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200162 Decompress *data*.
163
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200164 If *data* is the concatenation of multiple compressed streams, decompress
165 all of the streams.
166
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200167 For incremental decompression, use a :class:`BZ2Decompressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000168
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200169 .. versionchanged:: 3.3
170 Support for multi-stream inputs was added.
171