Copy ()
chutil.copy (source, destination)
The Shutil.copy () function implements the file copy function, copying the source file into the destination folder, and two parameters are in string format. If destination is a file name, it is used as the copied file name, which is equal to copy + rename. Examples are as follows:
>> Import shutil
>> import os
>> os.chdir (' c:\\ ')
>> shutil.copy (' C:\\spam.txt ', ' c:\\delicious ')
' c:\\delicious\\spam.txt '
>> shutil.copy (' eggs.txt ', ' c:\\delicious\\eggs2.txt ')
' C:\\delicious\\eggs2.txt '
As the code shows, the return value of the function is the file path in the string format after the successful copy.
CopyFile ()
CopyFile () copies the contents of the source to the target and generates IOERROR if no permissions are written to the target file
From shutil Import *
glob import glob
print ' Before: ', Glob (' huanhuan.* ') copyfile (' Huanhuan.txt ')
, ' huanhuan.txt.copy ')
print ' After: ', Glob (' huanhuan.* ')
This function opens the input file for reading and writing, regardless of its type, so some special files cannot be copied as new special files with CopyFile ().
>>> ================================ Restart ================================
>>>
Before: [' Huanhuan.txt '] after
: [' huanhuan.txt ', ' huanhuan.txt.copy ']
CopyFile () is actually using the underlying function copyfileobj (). The CopyFile () parameter is the file name, and the Copyfileobj () parameter is the open file handle. The third parameter is optional, which is used to read the buffer length of the block.
shutil import * Import os from Stringio import stringio import sys class Verbosestrin GIO (Stringio): def read (self, n=-1): next = Stringio.read (self, n) print ' read (%d) bytes '% n return next lo Rem_ipsum = "' This makes the dependency explicit, limits the scope to the" current file and provides faster access to the "
bit.* functions, too. It ' s good programming practice not to rely on the global variable bit being set assuming some
Ion has already loaded the module). The Require function ensures the "module is" only loaded once. ' Print ' defalut: ' input = Verbosestringio (lore m_ipsum) output = Stringio () copyfileobj (input, output) print print ' All at once: ' input = Verbosestringio (lorem_ipsum) ou Tput = Stringio () copyfileobj (input, output,-1) Print print ' Blocks of 256: ' input = Verbosestringio (lorem_ipsum) output = Stringio () copyfileobj (input, output, 256)
The default behavior is to read with large blocks of data. Using-1 will read all input at once, or you can use other positive numbers to set the size of a particular block.
>>> ================================ Restart ================================
>>>
Defalut:
Read (16384) bytes
Read (16384) bytes all at
once:
read ( -1) bytes
Read ( -1) bytes
Blocks of 256:
read (256) bytes
read (256) bytes
read (256) bytes
Similar to the Unix command-line tool Cp,copy () function interprets the output name in the same way. If the specified target indicates a directory instead of a file, a new file is created in the directory using the base name of the source file.
From shutil Import *
import os
dir = os.getcwd ()
If not os.path.exists ('%s\\example '% dir):
Os.mkdir ('%s\\example '% dir)
print ' Before: ', Os.listdir (' example ')
copy (' Huanhuan.txt ', ' example ')
print ' After: ', Os.listdir (' example ')
>>> ================================ Restart ================================
>>>
Before: [] after
: [' Huanhuan.txt ']
Copy2 ()
Copy2 () works like copy (), but the metadata copied to the new file contains the access and modification time.
From shutil Import *
import OS
import time
dir = os.getcwd ()
If not os.path.exists ('%s\\example '% dir): C6/>os.mkdir ('%s\\example '% dir)
def show_file_info (filename):
stat_info = os.stat (filename)
print ' \ Tmode : ', stat_info.st_mode
print ' \tcreated: ', Time.ctime (stat_info.st_ctime)
print ' \taccessed: ', Time.ctime (stat_info.st_atime)
print ' \tmodified: ', Time.ctime (stat_info.st_mtime)
print ' SOURCE: '
show_file_info (' huanhuan.txt ')
copy2 (' huanhuan.txt ', ' example ')
print ' DEST: '
show_file_ info ('%s\\example\\huanhuan.txt '% dir)
The file attributes are exactly the same as the original file.
>>> ================================ Restart ================================
>>>
SOURCE:
Mode : 33206
created:thu Feb 17:42:46 2014
accessed:thu
Feb-17:42:46 2014 modified:t Hu Feb 17:42:46 2014
DEST:
Mode : 33206 created:thu
Feb 18:29:14 2014 Accessed:thu Feb
13 17:42:46 2014
Modified:thu Feb 13 17:42:46 2014
Copying file meta data
creating a new file on Unix will accept permissions based on the current user's umask. To copy permissions from one file to another, you can use Copymode ().
From shutil Import *
import os out
commands import *
with open (' file_to_change.txt ', ' wt ') as F:
F.W Rite (' I Love You ')
os.chmod (' File_to_change.txt ', 0444)
print ' before: '
print GetStatus (' File_to_ Change.txt ')
copymode (' shutil_copymode.py ', ' file_to_change.txt ')
print ' after: '
print GetStatus (' File_to_change.txt ')
To replicate other metadata, you can use Copystat ().
From shutil Import *
import OS
import time
def show_file_info (filename):
stat_info = os.stat (filename)
print ' \tmode : ', stat_info.st_mode
print ' \tcreated : ', Time.ctime (stat_info.st_ctime)
Print ' \taccessed : ', Time.ctime (stat_info.st_atime)
print ' \tmodified : ', Time.ctime (stat_info.st_mtime With
open (' file_to_change.txt ', ' wt ') as F:
f.write (' I Love You ')
os.chmod (' File_to_change.txt '), 0444)
print ' Before: '
show_file_info (' file_to_change.txt ')
copystat (' shutil_copystat.py ', ' File_ To_change.txt ')
print ' After: '
show_file_info (' File_to_change.txt ')
Using Copystat () only copies the permissions and dates associated with the file.
working with a directory tree
the shutil contains three functions to work with the directory tree. To copy a directory from one location to another, use Copytree (). This recursively iterates through the source tree and copies the files to the destination.
Copytree () can take the current implementation as a starting point, make it more robust before use, and add some features, such as a progress bar.
From shutil Import *
commands import *
print ' before: '
print getoutput (' ls-rlast/tmp/example ')
Copytree ('.. /shutil ', '/tmp/example ')
print ' \nafter: '
print getoutput (' ls-rlast/tmp/example ')
The Symlinks parameter controls whether the symbolic link is copied as a link or a file copy. By default, the content is copied to the new file, and if the option is true, a new symbolic link is created in the target.
To delete a directory and its contents, you can use Rmtree ().
From shutil Import *
commands import *
print ' before: '
print getoutput (' ls-rlast/tmp/example ')
rmtree ('/tmp/example ')
print ' \nafter: '
print getoutput (' ls-rlast/tmp/example ')
Moving a file or directory from one location to another can use Move ().
From shutil import * "
glob import glob
with open" (' example.txt ', ' wt ') as F:
f.write (' I Love you ')
print ' Before: ', Glob (' example* ') move
(' example.txt ', ' example.out ')
print ' After: ', Glob (' example* ')
The semantics are similar to the UNIX command mv. If the source and destination are in the same file system, the source file is renamed. Otherwise, the source file is copied to the destination file and the source file is deleted.
>>> ================================ Restart ================================
>>>
Before: [' example ', ' Example.txt '] after
: [' example ', ' example.out ']