# Copy file

[`shutil`](http://docs.python.org/3/library/shutil.html) has many methods you can use. One of which is:

```python
import shutil

shutil.copyfile(src, dst)

# 2nd option
shutil.copy(src, dst)  # dst can be a folder; use shutil.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 `str`s.

Another `shutil` method to look at is [`shutil.copy2()`](https://docs.python.org/3/library/shutil.html#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.

<table data-header-hidden><thead><tr><th width="183"></th><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>Function</td><td>Copies<br>metadata</td><td>Copies<br>permissions</td><td>Uses file object</td><td>Destination<br>may be directory</td></tr><tr><td><a href="https://docs.python.org/3/library/shutil.html#shutil.copy">shutil.copy</a></td><td>No</td><td>Yes</td><td>No</td><td>Yes</td></tr><tr><td><a href="https://docs.python.org/3/library/shutil.html#shutil.copyfile">shutil.copyfile</a></td><td>No</td><td>No</td><td>No</td><td>No</td></tr><tr><td><a href="https://docs.python.org/3/library/shutil.html#shutil.copy2">shutil.copy2</a></td><td>Yes</td><td>Yes</td><td>No</td><td>Yes</td></tr><tr><td><a href="https://docs.python.org/3/library/shutil.html#shutil.copyfileobj">shutil.copyfileobj</a></td><td>No</td><td>No</td><td>Yes</td><td>No</td></tr></tbody></table>

<br>
