blob: 893bb9ba82587b18a55df7951d6cdd3dae04309a [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 Vawda50cb9362012-06-04 23:31:22 +020038 overwriting, or ``'a'`` for appending. These can equivalently be given as
39 ``'rb'``, ``'wb'``, and ``'ab'`` respectively.
40
41 If *filename* is a file object (rather than an actual file name), 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
Nadeem Vawdaaebcdba2012-06-04 23:31:20 +020075 Support was added for *filename* being a :term:`file object` instead of an
76 actual filename.
Georg Brandl116aa622007-08-15 14:28:22 +000077
Nadeem Vawda200e00a2011-05-27 01:52:16 +020078 .. versionchanged:: 3.3
79 The ``'a'`` (append) mode was added, along with support for reading
80 multi-stream files.
81
Georg Brandl116aa622007-08-15 14:28:22 +000082
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020083Incremental (de)compression
84---------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000085
Georg Brandl0d8f0732009-04-05 22:20:44 +000086.. class:: BZ2Compressor(compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000087
88 Create a new compressor object. This object may be used to compress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020089 incrementally. For one-shot compression, use the :func:`compress` function
90 instead.
91
92 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
93 default is ``9``.
Georg Brandl116aa622007-08-15 14:28:22 +000094
Benjamin Petersone41251e2008-04-25 01:59:09 +000095 .. method:: compress(data)
Georg Brandl116aa622007-08-15 14:28:22 +000096
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020097 Provide data to the compressor object. Returns a chunk of compressed data
98 if possible, or an empty byte string otherwise.
99
100 When you have finished providing data to the compressor, call the
101 :meth:`flush` method to finish the compression process.
Georg Brandl116aa622007-08-15 14:28:22 +0000102
103
Benjamin Petersone41251e2008-04-25 01:59:09 +0000104 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000105
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200106 Finish the compression process. Returns the compressed data left in
107 internal buffers.
108
109 The compressor object may not be used after this method has been called.
Georg Brandl116aa622007-08-15 14:28:22 +0000110
111
112.. class:: BZ2Decompressor()
113
114 Create a new decompressor object. This object may be used to decompress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200115 incrementally. For one-shot compression, use the :func:`decompress` function
116 instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000117
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200118 .. note::
119 This class does not transparently handle inputs containing multiple
120 compressed streams, unlike :func:`decompress` and :class:`BZ2File`. If
121 you need to decompress a multi-stream input with :class:`BZ2Decompressor`,
122 you must use a new decompressor for each stream.
123
Benjamin Petersone41251e2008-04-25 01:59:09 +0000124 .. method:: decompress(data)
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200126 Provide data to the decompressor object. Returns a chunk of decompressed
127 data if possible, or an empty byte string otherwise.
128
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200129 Attempting to decompress data after the end of the current stream is
130 reached raises an :exc:`EOFError`. If any data is found after the end of
131 the stream, it is ignored and saved in the :attr:`unused_data` attribute.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200132
133
134 .. attribute:: eof
135
136 True if the end-of-stream marker has been reached.
137
138 .. versionadded:: 3.3
139
140
141 .. attribute:: unused_data
142
143 Data found after the end of the compressed stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000144
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200145 If this attribute is accessed before the end of the stream has been
146 reached, its value will be ``b''``.
147
Georg Brandl116aa622007-08-15 14:28:22 +0000148
149One-shot (de)compression
150------------------------
151
Georg Brandl0d8f0732009-04-05 22:20:44 +0000152.. function:: compress(data, compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +0000153
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200154 Compress *data*.
155
156 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
157 default is ``9``.
158
159 For incremental compression, use a :class:`BZ2Compressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000160
161
162.. function:: decompress(data)
163
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200164 Decompress *data*.
165
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200166 If *data* is the concatenation of multiple compressed streams, decompress
167 all of the streams.
168
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200169 For incremental decompression, use a :class:`BZ2Decompressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000170
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200171 .. versionchanged:: 3.3
172 Support for multi-stream inputs was added.
173