How do I copy a file in Python?
shutil
is a Python module that provides various methods for file operations. One of these methods is copyfile
, which you can use to copy the contents of one file to another:
import shutil
shutil.copyfile(src, dst)
Alternatively, you can use copy
to copy a file, and if dst
is a folder, you can use copy2
to preserve the timestamp:
shutil.copy(src, dst) # dst can be a folder; use shutil.copy2() to preserve timestamp
When using copy
, both src
and dst
should be the full filename including the path. The destination must be writable, or else an IOError
will be raised. If the destination file already exists, it will be replaced. However, copy
cannot copy special files such as character or block devices and pipes.
If you are working with path names given as strings, copy
is the preferable method over copyfile
. Additionally, shutil.copy2()
is another method similar to copy
but preserves more metadata, such as timestamps.
To copy files using the subprocess
module in Python, you can use the subprocess.call
function. The signature of subprocess.call
is as follows:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
Here’s an example of how to use subprocess.call
to copy a file in Linux/Unix and Windows:
import subprocess
# 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)
Similarly, you can use subprocess.check_output
to capture the output of the command. Its signature is:
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
Here’s an example of how to use subprocess.check_output
to copy a file in Linux/Unix and Windows:
import subprocess
# 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)
Please note that setting shell=True
can be a security risk, especially when dealing with user input, as it allows the execution of arbitrary commands. Use it with caution.
To copy files using the os
module in Python, you can use os.popen
or os.system
functions.
The signature of os.popen
is:
os.popen(cmd[, mode[, bufsize]])
Here’s an example of how to use os.popen
to copy a file in Unix/Linux and Windows:
import os
# In Unix/Linux
os.popen('cp source.txt destination.txt')
# In Windows
os.popen('copy source.txt destination.txt')
Similarly, you can use os.system
to execute a command:
# In Linux/Unix
os.system('cp source.txt destination.txt')
# In Windows
os.system('copy source.txt destination.txt')
However, note that using os.popen
or os.system
to copy files is not the recommended approach as it might not handle errors or permissions correctly. It’s better to use shutil.copy
or subprocess.call
for more reliable file copying operations.