python - How to copy files?

ID : 170

viewed : 181

Tags : pythonfilecopyfilesystemsfile-copyingpython

Top 5 Answer for python - How to copy files?

vote vote

99

shutil has many methods you can use. One of which is:

from shutil import copyfile copyfile(src, dst)  # 2nd option copy(src, dst)  # dst can be a folder; use copy2() to preserve timestamp 
  • Copy the contents of the file named src to a file named dst. Both src and dst need to be the entire filename of the files, including path.
  • The destination location must be writable; otherwise, an IOError exception will be raised.
  • If dst already exists, it will be replaced.
  • Special files such as character or block devices and pipes cannot be copied with this function.
  • With copy, src and dst are path names given as strs.

Another shutil method to look at is shutil.copy2(). It's similar but preserves more metadata (e.g. time stamps).

If you use os.path operations, use copy rather than copyfile. copyfile will only accept strings.

vote vote

90

Function Copies
metadata
Copies
permissions
Uses file object Destination
may be directory
shutil.copy No Yes No Yes
shutil.copyfile No No No No
shutil.copy2 Yes Yes No Yes
shutil.copyfileobj No No Yes No
vote vote

80

copy2(src,dst) is often more useful than copyfile(src,dst) because:

  • it allows dst to be a directory (instead of the complete target filename), in which case the basename of src is used for creating the new file;
  • it preserves the original modification and access info (mtime and atime) in the file metadata (however, this comes with a slight overhead).

Here is a short example:

import shutil shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext 
vote vote

62

In Python, you can copy the files using


import os import shutil import subprocess 

1) Copying files using shutil module

shutil.copyfile signature

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)  # example     shutil.copyfile('source.txt', 'destination.txt') 

shutil.copy signature

shutil.copy(src_file, dest_file, *, follow_symlinks=True)  # example shutil.copy('source.txt', 'destination.txt') 

shutil.copy2 signature

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)  # example shutil.copy2('source.txt', 'destination.txt')   

shutil.copyfileobj signature

shutil.copyfileobj(src_file_object, dest_file_object[, length])  # example file_src = 'source.txt'   f_src = open(file_src, 'rb')  file_dest = 'destination.txt'   f_dest = open(file_dest, 'wb')  shutil.copyfileobj(f_src, f_dest)   

2) Copying files using os module

os.popen signature

os.popen(cmd[, mode[, bufsize]])  # example # In Unix/Linux os.popen('cp source.txt destination.txt')   # In Windows os.popen('copy source.txt destination.txt') 

os.system signature

os.system(command)   # In Linux/Unix os.system('cp source.txt destination.txt')    # In Windows os.system('copy source.txt destination.txt') 

3) Copying files using subprocess module

subprocess.call signature

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)  # example (WARNING: setting `shell=True` might be a security-risk) # In Linux/Unix status = subprocess.call('cp source.txt destination.txt', shell=True)   # In Windows status = subprocess.call('copy source.txt destination.txt', shell=True) 

subprocess.check_output signature

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)  # example (WARNING: setting `shell=True` might be a security-risk) # In Linux/Unix status = subprocess.check_output('cp source.txt destination.txt', shell=True)  # In Windows status = subprocess.check_output('copy source.txt destination.txt', shell=True) 

vote vote

52

You can use one of the copy functions from the shutil package:

 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Function              preserves     supports          accepts     copies other                       permissions   directory dest.   file obj    metadata   ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― shutil.copy              ✔             ✔                 ☐           ☐ shutil.copy2             ✔             ✔                 ☐           ✔ shutil.copyfile          ☐             ☐                 ☐           ☐ shutil.copyfileobj       ☐             ☐                 ✔           ☐ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Example:

import shutil shutil.copy('/etc/hostname', '/var/tmp/testhostname') 

Top 3 video Explaining python - How to copy files?

Related QUESTION?