shutil.move() will both rename files, the command that is closest to the Unix mv command is
shutil.move(). The difference is that
os.rename() doesn’t work if the source and destination are on different disks, while
shutil.move() is files disk agnostic.
How to move a file in Python?
There are multiple ways to move a file in Python.
All employ the same syntax:
import os import shutil os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo") os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo") shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
Note that you must include the file name (
file.foo) in both the source and destination arguments. If it is changed, the file will be renamed as well as moved.
Note also that in the first two cases the directory in which the new file is being created must already exist. On Windows, a file with that name must not exist or an exception will be raised, but
os.replace() will silently replace a file even in that occurrence.
As has been noted in comments on other answers,
shutil.move simply calls
os.rename in most cases. However, if the destination is on a different disk than the source, it will instead copy and then delete the source file.
How to move a file in Python after 3.4+? Answer #2:
After Python 3.4, you can also use
Path to move file.
from pathlib import Path Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")
For either the os.rename or shutil.move you will need to import the module. No * character is necessary to get all the files moved.
We have a folder at /opt/awesome called source with one file named awesome.txt.
in /opt/awesome ○ → ls source ○ → ls source awesome.txt python >>> source = '/opt/awesome/source' >>> destination = '/opt/awesome/destination' >>> import os >>> os.rename(source, destination) >>> os.listdir('/opt/awesome') ['destination']
We used os.listdir to see that the folder name in fact changed. Here’s the shutil moving the destination back to source.
>>> import shutil >>> shutil.move(destination, source) >>> os.listdir('/opt/awesome/source') ['awesome.txt']
This time I checked inside the source folder to be sure the awesome.txt file I created exists. It is there 🙂
Now we have moved a folder and its files from a source to a destination and back again.
To move a file in python, this is what I’m using at the moment:
import os, shutil path = "/volume1/Users/Transfer/" moveto = "/volume1/Users/Drive_Transfer/" files = os.listdir(path) files.sort() for f in files: src = path+f dst = moveto+f shutil.move(src,dst)
Now fully functional. Hope this helps you.
I’ve turned this into a function, that accepts a source and destination directory, making the destination folder if it doesn’t exist, and moves the files. Also allows for filtering of the src files, for example if you only want to move images, then you use the pattern
'*.jpg', by default, it moves everything in the directory
import os, shutil, pathlib, fnmatch def move_dir(src: str, dst: str, pattern: str = '*'): if not os.path.isdir(dst): pathlib.Path(dst).mkdir(parents=True, exist_ok=True) for f in fnmatch.filter(os.listdir(src), pattern): shutil.move(os.path.join(src, f), os.path.join(dst, f))
Hope you learned something from this post.
Follow Programming Articles for more!