Python: Move Files From One Directory To Another

How do you move files from one directory to another using Python?

If you want to move specific files from one directory to another with Python, use the glob library to fetch the correct files, then use the os library’s rename method to change the current file to the new directory.

Here is an example of how this might look using a Python script.

import os
import glob

current_dir = os.getcwd()
old_files = os.path.join(current_dir, 'old_loc', '*.py')

With the current code I have imported the 2 essential libraries needed to help co-ordinate the change, these being the os and glob libraries.

Once the libraries are brought in to the script the first variable captures the current directory where this script is located. By storing this information I can use it to help direct from the current script location to where the current files are located and where they need to go.

Therefore, the next command directs where to find the files I would like to move. You will notice within this line that the last parameter entered into the os.path.join() function is an asterisked file name *.py .

This will be a path that glob will be able to recognise and capture within the path.

Currently the structure of my project looks something like this:

root_dir
|
+ my_script.py
|
+- old_loc
| |
| + 1.py
| + 2.py
|
+- new_loc

As you can see from the above folder structure the file where this information will be stored is outside the directories of the old_loc and new_loc .

Irrespective of where the script is located the important thing to note is making sure you correctly identify the path of the files you wish to move.

The next part of the script captures all the files from the old_loc directory:

files_to_move = glob.glob(old_files)

The above line of code captures all the files according to the path passed in from the variable old_files .

This means the variable files_to_move will contain a list of string paths to each file satisying the constraints of old_files .

The next part is to loop through each of the string paths and move the file to it’s new location.

This is how the next part of the code will be constructed using a for-loop to iterate through each of the path strings:

for old_file in files_to_move:
file_name = os.path.basename(old_file)
new_file = os.path.join(current_loc, 'new_loc', file_name)
os.rename(old_file, new_file)

This final part of the code loops through each of the path strings in the files_to_move variable and then using the os.path.basename() method extracts just the file name from the path so that the same file name can be used in the new directory.

This obviously assumes the contents of the directory where the files are going to be relocated to will not cause any naming clashes. If this is a possibility you might want to check for the existence of new_file before moving otherwise you will lose files already existing in the new location.

You can read more about iterating through file names here .

Once the current file name is captured it is used to create a new path with os.path.join() . With the new path string obtained the final step is to use the os.rename() function to move a file from one location to another.

Here is the entire snippet of code in its entirety here:

import os
import glob

current_dir = os.getcwd()
old_files = os.path.join(current_dir, 'old_loc', '*.py')
files_to_move = glob.glob(old_files)

for old_file in files_to_move:
file_name = os.path.basename(old_file)
new_file = os.path.join(current_dir, 'new_loc', file_name)
os.rename(old_file, new_file)

After the above script is run in the terminal using:

$ python3 my_script.py

The result of the directory structure is as follows:

root_dir
|
+ my_script.py
|
+- old_loc
|
+- new_loc
|
+ 1.py
+ 2.py

The beauty of this process is that there’s no need to make copies or to delete unwanted files. The process is simple and effectively moves all the files acccording to the path and notation used with the glob.glob() function.

Summary

Moving a file in Python can easily be achieved by using the os and glob libraries. The os module helps to provide an easy way to create a path, whereas the glob module helps to find the files you want to move (as maybe you only want to move files of a certain type).

Creating a Python script to tie all these bits together is trivial.

Photo of author
Ryan Sheehy
Ryan has been dabbling in code since the late '90s when he cut his teeth exploring VBA in Excel. Having his eyes opened with the potential of automating repetitive tasks, he expanded to Python and then moved over to scripting languages such as HTML, CSS, Javascript and PHP.