mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 b940e113bf
			
		
	
	
		b940e113bf
		
	
	
	
	
		
			
			(a) "except E, V" -> "except E as V" (b) V is now limited to a simple name (local variable) (c) V is now deleted at the end of the except block
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \section{\module{shutil} ---
 | |
|          High-level file operations}
 | |
| 
 | |
| \declaremodule{standard}{shutil}
 | |
| \modulesynopsis{High-level file operations, including copying.}
 | |
| \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
 | |
| % partly based on the docstrings
 | |
| 
 | |
| 
 | |
| The \module{shutil} module offers a number of high-level operations on
 | |
| files and collections of files.  In particular, functions are provided 
 | |
| which support file copying and removal.
 | |
| \index{file!copying}
 | |
| \index{copying files}
 | |
| 
 | |
| \strong{Caveat:}  On MacOS, the resource fork and other metadata are
 | |
| not used.  For file copies, this means that resources will be lost and 
 | |
| file type and creator codes will not be correct.
 | |
| 
 | |
| 
 | |
| \begin{funcdesc}{copyfile}{src, dst}
 | |
|   Copy the contents of the file named \var{src} to a file named
 | |
|   \var{dst}.  The destination location must be writable; otherwise, 
 | |
|   an \exception{IOError} exception will be raised.
 | |
|   If \var{dst} already exists, it will be replaced.  
 | |
|   Special files such as character or block devices
 | |
|   and pipes cannot be copied with this function.  \var{src} and
 | |
|   \var{dst} are path names given as strings.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copyfileobj}{fsrc, fdst\optional{, length}}
 | |
|   Copy the contents of the file-like object \var{fsrc} to the
 | |
|   file-like object \var{fdst}.  The integer \var{length}, if given,
 | |
|   is the buffer size. In particular, a negative \var{length} value
 | |
|   means to copy the data without looping over the source data in
 | |
|   chunks; by default the data is read in chunks to avoid uncontrolled
 | |
|   memory consumption.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copymode}{src, dst}
 | |
|   Copy the permission bits from \var{src} to \var{dst}.  The file
 | |
|   contents, owner, and group are unaffected.  \var{src} and \var{dst}
 | |
|   are path names given as strings.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copystat}{src, dst}
 | |
|   Copy the permission bits, last access time, and last modification
 | |
|   time from \var{src} to \var{dst}.  The file contents, owner, and
 | |
|   group are unaffected.  \var{src} and \var{dst} are path names given
 | |
|   as strings.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copy}{src, dst}
 | |
|   Copy the file \var{src} to the file or directory \var{dst}.  If
 | |
|   \var{dst} is a directory, a file with the same basename as \var{src} 
 | |
|   is created (or overwritten) in the directory specified.  Permission
 | |
|   bits are copied.  \var{src} and \var{dst} are path names given as
 | |
|   strings.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copy2}{src, dst}
 | |
|   Similar to \function{copy()}, but last access time and last
 | |
|   modification time are copied as well.  This is similar to the
 | |
|   \UNIX{} command \program{cp} \programopt{-p}.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{copytree}{src, dst\optional{, symlinks}}
 | |
|   Recursively copy an entire directory tree rooted at \var{src}.  The
 | |
|   destination directory, named by \var{dst}, must not already exist;
 | |
|   it will be created as well as missing parent directories.
 | |
|   Permissions and times of directories are copied with \function{copystat()},
 | |
|   individual files are copied using \function{copy2()}.  
 | |
|   If \var{symlinks} is true, symbolic links in
 | |
|   the source tree are represented as symbolic links in the new tree;
 | |
|   if false or omitted, the contents of the linked files are copied to
 | |
|   the new tree.  If exception(s) occur, an \exception{Error} is raised
 | |
|   with a list of reasons.
 | |
| 
 | |
|   The source code for this should be considered an example rather than 
 | |
|   a tool.
 | |
| 
 | |
|   \versionchanged[\exception{Error} is raised if any exceptions occur during
 | |
|                   copying, rather than printing a message]{2.3}
 | |
| 
 | |
|   \versionchanged[Create intermediate directories needed to create \var{dst},
 | |
|                   rather than raising an error. Copy permissions and times of
 | |
| 		  directories using \function{copystat()}]{2.5}
 | |
| 
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{rmtree}{path\optional{, ignore_errors\optional{, onerror}}}
 | |
|   Delete an entire directory tree.\index{directory!deleting}
 | |
|   If \var{ignore_errors} is true,
 | |
|   errors resulting from failed removals will be ignored; if false or
 | |
|   omitted, such errors are handled by calling a handler specified by
 | |
|   \var{onerror} or, if that is omitted, they raise an exception.
 | |
| 
 | |
|   If \var{onerror} is provided, it must be a callable that accepts
 | |
|   three parameters: \var{function}, \var{path}, and \var{excinfo}.
 | |
|   The first parameter, \var{function}, is the function which raised
 | |
|   the exception; it will be \function{os.listdir()}, \function{os.remove()} or
 | |
|   \function{os.rmdir()}.  The second parameter, \var{path}, will be
 | |
|   the path name passed to \var{function}.  The third parameter,
 | |
|   \var{excinfo}, will be the exception information return by
 | |
|   \function{sys.exc_info()}.  Exceptions raised by \var{onerror} will
 | |
|   not be caught.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{move}{src, dst}
 | |
| Recursively move a file or directory to another location.
 | |
| 
 | |
| If the destination is on our current filesystem, then simply use
 | |
| rename.  Otherwise, copy src to the dst and then remove src.
 | |
| 
 | |
| \versionadded{2.3}
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{excdesc}{Error}
 | |
| This exception collects exceptions that raised during a mult-file
 | |
| operation. For \function{copytree}, the exception argument is a
 | |
| list of 3-tuples (\var{srcname}, \var{dstname}, \var{exception}).
 | |
| 
 | |
| \versionadded{2.3}
 | |
| \end{excdesc}
 | |
| 
 | |
| \subsection{Example \label{shutil-example}}
 | |
| 
 | |
| This example is the implementation of the \function{copytree()}
 | |
| function, described above, with the docstring omitted.  It
 | |
| demonstrates many of the other functions provided by this module.
 | |
| 
 | |
| \begin{verbatim}
 | |
| def copytree(src, dst, symlinks=0):
 | |
|     names = os.listdir(src)
 | |
|     os.mkdir(dst)
 | |
|     for name in names:
 | |
|         srcname = os.path.join(src, name)
 | |
|         dstname = os.path.join(dst, name)
 | |
|         try:
 | |
|             if symlinks and os.path.islink(srcname):
 | |
|                 linkto = os.readlink(srcname)
 | |
|                 os.symlink(linkto, dstname)
 | |
|             elif os.path.isdir(srcname):
 | |
|                 copytree(srcname, dstname, symlinks)
 | |
|             else:
 | |
|                 copy2(srcname, dstname)
 | |
|         except (IOError, os.error) as why:
 | |
|             print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))
 | |
| \end{verbatim}
 |