source: python/trunk/Doc/library/shutil.rst

Last change on this file was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 12.9 KB
RevLine 
[2]1:mod:`shutil` --- High-level file operations
2============================================
3
4.. module:: shutil
5 :synopsis: High-level file operations, including copying.
6.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
7.. partly based on the docstrings
8
9.. index::
10 single: file; copying
11 single: copying files
12
[391]13**Source code:** :source:`Lib/shutil.py`
14
15--------------
16
[2]17The :mod:`shutil` module offers a number of high-level operations on files and
18collections of files. In particular, functions are provided which support file
19copying and removal. For operations on individual files, see also the
20:mod:`os` module.
21
22.. warning::
23
[391]24 Even the higher-level file copying functions (:func:`shutil.copy`,
25 :func:`shutil.copy2`) can't copy all file metadata.
[2]26
27 On POSIX platforms, this means that file owner and group are lost as well
28 as ACLs. On Mac OS, the resource fork and other metadata are not used.
29 This means that resources will be lost and file type and creator codes will
30 not be correct. On Windows, file owners, ACLs and alternate data streams
31 are not copied.
32
33
[391]34.. _file-operations:
35
36Directory and files operations
37------------------------------
38
[2]39.. function:: copyfileobj(fsrc, fdst[, length])
40
41 Copy the contents of the file-like object *fsrc* to the file-like object *fdst*.
42 The integer *length*, if given, is the buffer size. In particular, a negative
43 *length* value means to copy the data without looping over the source data in
44 chunks; by default the data is read in chunks to avoid uncontrolled memory
45 consumption. Note that if the current file position of the *fsrc* object is not
46 0, only the contents from the current file position to the end of the file will
47 be copied.
48
49
50.. function:: copyfile(src, dst)
51
[391]52 Copy the contents (no metadata) of the file named *src* to a file named
53 *dst*. *dst* must be the complete target file name; look at
54 :func:`shutil.copy` for a copy that accepts a target directory path. If
55 *src* and *dst* are the same files, :exc:`Error` is raised.
[2]56 The destination location must be writable; otherwise, an :exc:`IOError` exception
57 will be raised. If *dst* already exists, it will be replaced. Special files
58 such as character or block devices and pipes cannot be copied with this
59 function. *src* and *dst* are path names given as strings.
60
61
62.. function:: copymode(src, dst)
63
64 Copy the permission bits from *src* to *dst*. The file contents, owner, and
65 group are unaffected. *src* and *dst* are path names given as strings.
66
67
68.. function:: copystat(src, dst)
69
70 Copy the permission bits, last access time, last modification time, and flags
71 from *src* to *dst*. The file contents, owner, and group are unaffected. *src*
72 and *dst* are path names given as strings.
73
74
75.. function:: copy(src, dst)
76
77 Copy the file *src* to the file or directory *dst*. If *dst* is a directory, a
78 file with the same basename as *src* is created (or overwritten) in the
79 directory specified. Permission bits are copied. *src* and *dst* are path
80 names given as strings.
81
82
83.. function:: copy2(src, dst)
84
[391]85 Similar to :func:`shutil.copy`, but metadata is copied as well -- in fact,
86 this is just :func:`shutil.copy` followed by :func:`copystat`. This is
87 similar to the Unix command :program:`cp -p`.
[2]88
89
90.. function:: ignore_patterns(\*patterns)
91
92 This factory function creates a function that can be used as a callable for
93 :func:`copytree`\'s *ignore* argument, ignoring files and directories that
94 match one of the glob-style *patterns* provided. See the example below.
95
96 .. versionadded:: 2.6
97
98
[391]99.. function:: copytree(src, dst, symlinks=False, ignore=None)
[2]100
101 Recursively copy an entire directory tree rooted at *src*. The destination
[391]102 directory, named by *dst*, must not already exist; it will be created as
103 well as missing parent directories. Permissions and times of directories
104 are copied with :func:`copystat`, individual files are copied using
105 :func:`shutil.copy2`.
[2]106
107 If *symlinks* is true, symbolic links in the source tree are represented as
[391]108 symbolic links in the new tree, but the metadata of the original links is NOT
109 copied; if false or omitted, the contents and metadata of the linked files
110 are copied to the new tree.
[2]111
112 If *ignore* is given, it must be a callable that will receive as its
113 arguments the directory being visited by :func:`copytree`, and a list of its
114 contents, as returned by :func:`os.listdir`. Since :func:`copytree` is
115 called recursively, the *ignore* callable will be called once for each
116 directory that is copied. The callable must return a sequence of directory
117 and file names relative to the current directory (i.e. a subset of the items
118 in its second argument); these names will then be ignored in the copy
119 process. :func:`ignore_patterns` can be used to create such a callable that
120 ignores names based on glob-style patterns.
121
122 If exception(s) occur, an :exc:`Error` is raised with a list of reasons.
123
124 The source code for this should be considered an example rather than the
125 ultimate tool.
126
127 .. versionchanged:: 2.3
128 :exc:`Error` is raised if any exceptions occur during copying, rather than
129 printing a message.
130
131 .. versionchanged:: 2.5
132 Create intermediate directories needed to create *dst*, rather than raising an
133 error. Copy permissions and times of directories using :func:`copystat`.
134
135 .. versionchanged:: 2.6
136 Added the *ignore* argument to be able to influence what is being copied.
137
138
139.. function:: rmtree(path[, ignore_errors[, onerror]])
140
141 .. index:: single: directory; deleting
142
143 Delete an entire directory tree; *path* must point to a directory (but not a
144 symbolic link to a directory). If *ignore_errors* is true, errors resulting
145 from failed removals will be ignored; if false or omitted, such errors are
146 handled by calling a handler specified by *onerror* or, if that is omitted,
147 they raise an exception.
148
149 If *onerror* is provided, it must be a callable that accepts three
150 parameters: *function*, *path*, and *excinfo*. The first parameter,
151 *function*, is the function which raised the exception; it will be
152 :func:`os.path.islink`, :func:`os.listdir`, :func:`os.remove` or
153 :func:`os.rmdir`. The second parameter, *path*, will be the path name passed
154 to *function*. The third parameter, *excinfo*, will be the exception
155 information return by :func:`sys.exc_info`. Exceptions raised by *onerror*
156 will not be caught.
157
158 .. versionchanged:: 2.6
159 Explicitly check for *path* being a symbolic link and raise :exc:`OSError`
160 in that case.
161
162
163.. function:: move(src, dst)
164
[391]165 Recursively move a file or directory (*src*) to another location (*dst*).
[2]166
[391]167 If the destination is a directory or a symlink to a directory, then *src* is
168 moved inside that directory.
[2]169
[391]170 The destination directory must not already exist. If the destination already
171 exists but is not a directory, it may be overwritten depending on
172 :func:`os.rename` semantics.
173
174 If the destination is on the current filesystem, then :func:`os.rename` is
175 used. Otherwise, *src* is copied (using :func:`shutil.copy2`) to *dst* and
176 then removed.
177
[2]178 .. versionadded:: 2.3
179
180
181.. exception:: Error
182
[391]183 This exception collects exceptions that are raised during a multi-file
184 operation. For :func:`copytree`, the exception argument is a list of 3-tuples
185 (*srcname*, *dstname*, *exception*).
[2]186
187 .. versionadded:: 2.3
188
189
[391]190.. _copytree-example:
[2]191
[391]192copytree example
193::::::::::::::::
[2]194
195This example is the implementation of the :func:`copytree` function, described
196above, with the docstring omitted. It demonstrates many of the other functions
197provided by this module. ::
198
199 def copytree(src, dst, symlinks=False, ignore=None):
200 names = os.listdir(src)
201 if ignore is not None:
202 ignored_names = ignore(src, names)
203 else:
204 ignored_names = set()
205
206 os.makedirs(dst)
207 errors = []
208 for name in names:
209 if name in ignored_names:
210 continue
211 srcname = os.path.join(src, name)
212 dstname = os.path.join(dst, name)
213 try:
214 if symlinks and os.path.islink(srcname):
215 linkto = os.readlink(srcname)
216 os.symlink(linkto, dstname)
217 elif os.path.isdir(srcname):
218 copytree(srcname, dstname, symlinks, ignore)
219 else:
220 copy2(srcname, dstname)
221 # XXX What about devices, sockets etc.?
[391]222 except (IOError, os.error) as why:
[2]223 errors.append((srcname, dstname, str(why)))
224 # catch the Error from the recursive copytree so that we can
225 # continue with other files
[391]226 except Error as err:
[2]227 errors.extend(err.args[0])
228 try:
229 copystat(src, dst)
230 except WindowsError:
231 # can't copy file access times on Windows
232 pass
[391]233 except OSError as why:
[2]234 errors.extend((src, dst, str(why)))
235 if errors:
236 raise Error(errors)
237
238Another example that uses the :func:`ignore_patterns` helper::
239
240 from shutil import copytree, ignore_patterns
241
242 copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
243
244This will copy everything except ``.pyc`` files and files or directories whose
245name starts with ``tmp``.
246
247Another example that uses the *ignore* argument to add a logging call::
248
249 from shutil import copytree
250 import logging
251
252 def _logpath(path, names):
253 logging.info('Working in %s' % path)
254 return [] # nothing will be ignored
255
256 copytree(source, destination, ignore=_logpath)
257
[391]258
259.. _archiving-operations:
260
261Archiving operations
262--------------------
263
264High-level utilities to create and read compressed and archived files are also
265provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules.
266
267.. function:: make_archive(base_name, format, [root_dir, [base_dir, [verbose, [dry_run, [owner, [group, [logger]]]]]]])
268
269 Create an archive file (eg. zip or tar) and returns its name.
270
271 *base_name* is the name of the file to create, including the path, minus
272 any format-specific extension. *format* is the archive format: one of
273 "zip", "tar", "bztar" or "gztar".
274
275 *root_dir* is a directory that will be the root directory of the
276 archive; ie. we typically chdir into *root_dir* before creating the
277 archive.
278
279 *base_dir* is the directory where we start archiving from;
280 ie. *base_dir* will be the common prefix of all files and
281 directories in the archive.
282
283 *root_dir* and *base_dir* both default to the current directory.
284
285 *owner* and *group* are used when creating a tar archive. By default,
286 uses the current owner and group.
287
288 *logger* must be an object compatible with :pep:`282`, usually an instance of
289 :class:`logging.Logger`.
290
291 .. versionadded:: 2.7
292
293
294.. function:: get_archive_formats()
295
296 Return a list of supported formats for archiving.
297 Each element of the returned sequence is a tuple ``(name, description)``
298
299 By default :mod:`shutil` provides these formats:
300
301 - *gztar*: gzip'ed tar-file
302 - *bztar*: bzip2'ed tar-file
303 - *tar*: uncompressed tar file
304 - *zip*: ZIP file
305
306 You can register new formats or provide your own archiver for any existing
307 formats, by using :func:`register_archive_format`.
308
309 .. versionadded:: 2.7
310
311
312.. function:: register_archive_format(name, function, [extra_args, [description]])
313
314 Register an archiver for the format *name*. *function* is a callable that
315 will be used to invoke the archiver.
316
317 If given, *extra_args* is a sequence of ``(name, value)`` that will be
318 used as extra keywords arguments when the archiver callable is used.
319
320 *description* is used by :func:`get_archive_formats` which returns the
321 list of archivers. Defaults to an empty list.
322
323 .. versionadded:: 2.7
324
325
326.. function:: unregister_archive_format(name)
327
328 Remove the archive format *name* from the list of supported formats.
329
330 .. versionadded:: 2.7
331
332
333.. _archiving-example:
334
335Archiving example
336:::::::::::::::::
337
338In this example, we create a gzip'ed tar-file archive containing all files
339found in the :file:`.ssh` directory of the user::
340
341 >>> from shutil import make_archive
342 >>> import os
343 >>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
344 >>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
345 >>> make_archive(archive_name, 'gztar', root_dir)
346 '/Users/tarek/myarchive.tar.gz'
347
348The resulting archive contains::
349
350 $ tar -tzvf /Users/tarek/myarchive.tar.gz
351 drwx------ tarek/staff 0 2010-02-01 16:23:40 ./
352 -rw-r--r-- tarek/staff 609 2008-06-09 13:26:54 ./authorized_keys
353 -rwxr-xr-x tarek/staff 65 2008-06-09 13:26:54 ./config
354 -rwx------ tarek/staff 668 2008-06-09 13:26:54 ./id_dsa
355 -rwxr-xr-x tarek/staff 609 2008-06-09 13:26:54 ./id_dsa.pub
356 -rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa
357 -rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub
358 -rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
Note: See TracBrowser for help on using the repository browser.