blob: 9577f31247bc6c82c1cf41c06ea62cc0d28667f4 [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 Vawda54d81442012-02-04 13:58:07 +020029.. class:: BZ2File(filename=None, mode='r', buffering=None, compresslevel=9, \*, fileobj=None)
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
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020033 The :class:`BZ2File` can wrap an existing :term:`file object` (given by
34 *fileobj*), or operate directly on a named file (named by *filename*).
35 Exactly one of these two parameters should be provided.
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
38 overwriting, or ``'a'`` for appending. If *fileobj* is provided, a mode of
39 ``'w'`` does not truncate the file, and is instead equivalent to ``'a'``.
Georg Brandl116aa622007-08-15 14:28:22 +000040
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020041 The *buffering* argument is ignored. Its use is deprecated.
42
Nadeem Vawda200e00a2011-05-27 01:52:16 +020043 If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be a number between
44 ``1`` and ``9`` specifying the level of compression: ``1`` produces the
45 least compression, and ``9`` (default) produces the most compression.
46
47 If *mode* is ``'r'``, the input file may be the concatenation of multiple
48 compressed streams.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020049
50 :class:`BZ2File` provides all of the members specified by the
51 :class:`io.BufferedIOBase`, except for :meth:`detach` and :meth:`truncate`.
52 Iteration and the :keyword:`with` statement are supported.
53
54 :class:`BZ2File` also provides the following method:
55
56 .. method:: peek([n])
57
58 Return buffered data without advancing the file position. At least one
59 byte of data will be returned (unless at EOF). The exact number of bytes
60 returned is unspecified.
61
62 .. versionadded:: 3.3
Benjamin Petersone0124bd2009-03-09 21:04:33 +000063
Benjamin Peterson10745a92009-03-09 21:08:47 +000064 .. versionchanged:: 3.1
Benjamin Petersone0124bd2009-03-09 21:04:33 +000065 Support for the :keyword:`with` statement was added.
66
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020067 .. versionchanged:: 3.3
68 The :meth:`fileno`, :meth:`readable`, :meth:`seekable`, :meth:`writable`,
69 :meth:`read1` and :meth:`readinto` methods were added.
Georg Brandl116aa622007-08-15 14:28:22 +000070
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020071 .. versionchanged:: 3.3
72 The *fileobj* argument to the constructor was added.
Georg Brandl116aa622007-08-15 14:28:22 +000073
Nadeem Vawda200e00a2011-05-27 01:52:16 +020074 .. versionchanged:: 3.3
75 The ``'a'`` (append) mode was added, along with support for reading
76 multi-stream files.
77
Georg Brandl116aa622007-08-15 14:28:22 +000078
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020079Incremental (de)compression
80---------------------------
Georg Brandl116aa622007-08-15 14:28:22 +000081
Georg Brandl0d8f0732009-04-05 22:20:44 +000082.. class:: BZ2Compressor(compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +000083
84 Create a new compressor object. This object may be used to compress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020085 incrementally. For one-shot compression, use the :func:`compress` function
86 instead.
87
88 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
89 default is ``9``.
Georg Brandl116aa622007-08-15 14:28:22 +000090
Benjamin Petersone41251e2008-04-25 01:59:09 +000091 .. method:: compress(data)
Georg Brandl116aa622007-08-15 14:28:22 +000092
Antoine Pitrou37dc5f82011-04-03 17:05:46 +020093 Provide data to the compressor object. Returns a chunk of compressed data
94 if possible, or an empty byte string otherwise.
95
96 When you have finished providing data to the compressor, call the
97 :meth:`flush` method to finish the compression process.
Georg Brandl116aa622007-08-15 14:28:22 +000098
99
Benjamin Petersone41251e2008-04-25 01:59:09 +0000100 .. method:: flush()
Georg Brandl116aa622007-08-15 14:28:22 +0000101
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200102 Finish the compression process. Returns the compressed data left in
103 internal buffers.
104
105 The compressor object may not be used after this method has been called.
Georg Brandl116aa622007-08-15 14:28:22 +0000106
107
108.. class:: BZ2Decompressor()
109
110 Create a new decompressor object. This object may be used to decompress data
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200111 incrementally. For one-shot compression, use the :func:`decompress` function
112 instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000113
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200114 .. note::
115 This class does not transparently handle inputs containing multiple
116 compressed streams, unlike :func:`decompress` and :class:`BZ2File`. If
117 you need to decompress a multi-stream input with :class:`BZ2Decompressor`,
118 you must use a new decompressor for each stream.
119
Benjamin Petersone41251e2008-04-25 01:59:09 +0000120 .. method:: decompress(data)
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200122 Provide data to the decompressor object. Returns a chunk of decompressed
123 data if possible, or an empty byte string otherwise.
124
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200125 Attempting to decompress data after the end of the current stream is
126 reached raises an :exc:`EOFError`. If any data is found after the end of
127 the stream, it is ignored and saved in the :attr:`unused_data` attribute.
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200128
129
130 .. attribute:: eof
131
132 True if the end-of-stream marker has been reached.
133
134 .. versionadded:: 3.3
135
136
137 .. attribute:: unused_data
138
139 Data found after the end of the compressed stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200141 If this attribute is accessed before the end of the stream has been
142 reached, its value will be ``b''``.
143
Georg Brandl116aa622007-08-15 14:28:22 +0000144
145One-shot (de)compression
146------------------------
147
Georg Brandl0d8f0732009-04-05 22:20:44 +0000148.. function:: compress(data, compresslevel=9)
Georg Brandl116aa622007-08-15 14:28:22 +0000149
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200150 Compress *data*.
151
152 *compresslevel*, if given, must be a number between ``1`` and ``9``. The
153 default is ``9``.
154
155 For incremental compression, use a :class:`BZ2Compressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000156
157
158.. function:: decompress(data)
159
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200160 Decompress *data*.
161
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200162 If *data* is the concatenation of multiple compressed streams, decompress
163 all of the streams.
164
Antoine Pitrou37dc5f82011-04-03 17:05:46 +0200165 For incremental decompression, use a :class:`BZ2Decompressor` instead.
Georg Brandl116aa622007-08-15 14:28:22 +0000166
Nadeem Vawda200e00a2011-05-27 01:52:16 +0200167 .. versionchanged:: 3.3
168 Support for multi-stream inputs was added.
169