How to Copy a File in Python?
Tags: python, programming, codenewbie, tutorial
Published: 2021-09-18 14:56:53

---
title: How to Copy a File in Python?
published: true
date: 2021-09-17 17:15:35 UTC
tags: #python #programming #codenewbie #tutorial
canonical_url: https://itsmycode.com/how-to-copy-a-file-in-python/
---

ItsMyCode |

We can copy a file in Python using **shutil, os, and subprocess modules**. Let’s take a look at each of these modules and the functions it has with examples.

## Modules to copy a file in Python 

- **shutil module**
- **os module**
- **subprocess module**

## shutil module top copy a file in Python

**`shutil `** module offers several easy-to-use copy functions to copy a file in Python. 



### **copy()** 

 The **`copy()`** method copies the source file to the destination file or directory. It copies the file data and file permission and returns the newly created file path. The input should be a path-like object or string. 

```python 
# Copy a file in Python using copy() method
import shutil
shutil.copy( '/src/test/source.txt' , '/dest/destination.txt' )
```

### **copy2()** 

The **`copy2()`** method is identical to the copy method, and in addition to that, it also preserves all the source file metadata. 

However, this functionality is not available on all operating systems. On the platforms where this functionality is unavailable, **`copy2 `** will preserve all the metadata without raising any exception, even if it cannot preserve all the metadata.

```python 
# Copy a file in Python using copy2() method
import shutil
shutil.copy2( '/src/test/source.txt' , '/dest/destination.txt' )
```

### **copyfile()** 

The **`copyfile()`** method copies the source file’s contents to the destination file. The destination file should be writeable, and it should not have the same name as the source file else, it will raise  **_SameFileError_**

```python 
# Copy a file in Python using copyfile() method
import shutil
shutil.copyfile( 'source.txt' , 'destination.txt' )
```

### **copyfileobj()**

The **`copyfileobj()`** copies the content of the source file to the target file using the file object. By default, this method copies the data in chunks, and we can also specify the buffer size through the length parameter.

```python 
# Copy a file in Python using copyfileobj() method
import shutil
src_file=open('source.txt', 'rb')
dest_file= open('target.txt' , 'wb')
shutil.copyfileobj( src_file , dest_file )
```

## os module to copy a file in Python

### **popen()** 

The **`popen()`** method creates a pipe to the command,  **cmd**. The method returns a file-like object connected to the cmd pipe. The command works the same as how we execute a command in the terminal window.

**On windows**

```python 
# Copy a file in Python using popen() method
import os
os.popen('copy source.txt destination.txt' )
```

**On Linux**

```python 

# Copy a file in Python using popen() method
import os
os.popen('cp source.txt destination.txt' )
```

### **system()** 

The **`system()`** method executes the specified command argument in a subshell. The return value of the **`system()`** method depends on the platform that runs the program. 

**On windows**

```python 
# Copy a file in Python using system() method
import os
os.system('copy source.txt destination.txt' )
```

**On Linux**

```python 

# Copy a file in Python using system() method
import os
os.system('cp source.txt destination.txt' )
```

## subprocess module to copy a file in Python

### **call() **

The**` call() `**method is the recommended way of executing a command from the operating system. 

**Syntax – subprocess.call(args, \*, stdin=None, stdout=None, stderr=None, shell=False)**

The args command includes the shell command that needs to be executed. By default, the shell argument is passed as false. If you pass this as true, it may cause a security risk.

**On windows**

```python 
# Copy a file in Python using call() method
import subprocess
subprocess.call('copy source.txt destination.txt', shell=True )
```

**On Linux**

```python 

# Copy a file in Python using call() method
import subprocess
subprocess.call('cp source.txt destination.txt', shell=True )
```

### **check\_output()** 

This**` check_output()`** method allows us to execute a command within a shell. It is very much similar to the subprocess.run command, except that by default, it pipes data from stdout as encoded bytes.

**On windows**

```python 
# Copy a file in Python using ceck_output() method
import subprocess
subprocess.check_output('copy source.txt destination.txt', shell=True)
```

**On Linux**

```python 

# Copy a file in Python using check_output() method
import subprocess
subprocess.check_output('cp source.txt destination.txt', shell=True )
```

The post [How to Copy a File in Python?](https://itsmycode.com/how-to-copy-a-file-in-python/) appeared first on [ItsMyCode](https://itsmycode.com).