Introduction
Whether or not you are studying knowledge from recordsdata or writing knowledge to recordsdata, understanding file operations is vital. In Python, and different languages, we frequently want to repeat recordsdata from one listing to a different, and even throughout the identical listing. This text will information you thru the method of copying recordsdata in Python utilizing numerous modules and strategies.
Python’s Filesystem and File Operations
Python supplies a number of built-in modules and capabilities to work together with the filesystem and carry out file operations. The 2 mostly used modules for file operations are the os
and shutil
modules.
The os
module supplies a method of utilizing working system dependent performance. It consists of capabilities for interacting with the filesystem, comparable to os.rename()
, os.take away()
, os.mkdir()
, and so forth.
import os
os.rename('old_name.txt', 'new_name.txt')
os.take away('file_to_remove.txt')
os.mkdir('new_directory')
The shutil
module affords quite a few high-level operations on recordsdata and collections of recordsdata. It comes underneath Python’s commonplace utility modules. This module helps in automating technique of copying and elimination of recordsdata and directories.
import shutil
shutil.copy('supply.txt', 'vacation spot.txt')
shutil.rmtree('directory_to_remove')
Be aware: Whereas os
module capabilities are environment friendly for easy file operations, for higher-level file operations comparable to copying or shifting recordsdata and directories, shutil
module capabilities are extra handy.
Now, let’s dive deeper into how we will use these modules to repeat recordsdata in Python.
Copy Information in Python
Python, being a high-level programming language, supplies us with a number of modules to simplify numerous duties. A type of duties is copying recordsdata. Whether or not you wish to again up your knowledge or transfer it to a different location, Python makes it straightforward to repeat recordsdata and directories. Right here we’ll check out the best way to copy recordsdata utilizing totally different built-in modules.
Utilizing the shutil Module to Copy Information
The shutil
module has strategies that assist in operations like copying, shifting, or eradicating recordsdata/directories. One in all its most used functionalities is the power to repeat recordsdata.
To repeat a file in Python utilizing the shutil
module, we use the shutil.copy()
perform. This perform takes two parameters: the supply file path and the vacation spot path.
Let’s take a look at an instance:
import shutil
supply = "/path/to/supply/file.txt"
vacation spot = "/path/to/vacation spot/file.txt"
shutil.copy(supply, vacation spot)
On this code snippet, we first import the shutil
module. We then outline the supply and vacation spot file paths. Lastly, we name the shutil.copy()
perform with the supply and vacation spot as arguments.
Be aware: The shutil.copy()
perform will overwrite the vacation spot file if it already exists. So, be cautious whereas utilizing it!
If you wish to protect the metadata (like permissions, modification occasions) whereas copying, you should use the shutil.copy2()
perform. This works the identical method as shutil.copy()
, however it additionally copies the metadata.
import shutil
supply = "/path/to/supply/file.txt"
vacation spot = "/path/to/vacation spot/file.txt"
shutil.copy2(supply, vacation spot)
Utilizing the os Module to Copy Information
Python’s built-in os
module is one other useful gizmo for interacting with the working system. Amongst its many options, and identical to shutil
, it permits us to repeat recordsdata. Nonetheless, it is vital to notice that the os
module does not present a direct methodology to repeat recordsdata like shutil
does. As an alternative, we will use the os.system()
perform to execute shell instructions inside our Python script.
Here is the way you’d use the os.system()
perform to repeat a file:
import os
src = "/path/to/supply/file.txt"
dest = "/path/to/vacation spot/file.txt"
os.system(f'cp {src} {dest}')
After working this script, you may discover that file.txt
has been copied from the supply path to the vacation spot path.
Wait! For the reason that os.system()
perform can execute any shell command, it may also be a possible safety danger if misused, so all the time watch out when utilizing it.
This can be a useful method to copy recordsdata in case you additionally have to execute different shell instructions or use cp
flags that are not accessible with shutil
‘s strategies.
Copying Information with Wildcards
In different use-cases, you would possibly wish to copy a number of recordsdata directly. As an instance we wish to copy all .txt
recordsdata in a listing. We will obtain this through the use of wildcards (*
) in our file paths. The glob
module in Python can be utilized to search out all of the pathnames matching a specified sample based on the foundations utilized by the Unix shell.
Here is is how we might use the glob
module to repeat all .txt
recordsdata from one listing to a different:
import glob
import shutil
src_dir = "/path/to/supply/listing/*.txt"
dest_dir = "/path/to/vacation spot/listing/"
txt_files = glob.glob(src_dir)
for file in txt_files:
shutil.copy(file, dest_dir)
On this code, we use glob
to get a listing of all textual content recordsdata in our supply listing, which we then iterate over and duplicate every one individually.
After working this script, you may see that each one .txt
recordsdata from the supply listing have been copied to the vacation spot listing.
Copying Directories in Python
Copying particular person recordsdata in Python is kind of simple, as we have seen. However what if you wish to copy a whole listing? Whereas it sounds extra difficult, that is truly fairly straightforward to do with the shutil
module. The copytree()
perform means that you can copy directories, together with all of the recordsdata and sub-directories inside them.
Try our hands-on, sensible information to studying Git, with best-practices, industry-accepted requirements, and included cheat sheet. Cease Googling Git instructions and truly be taught it!
import shutil
shutil.copytree('/path/to/source_directory', '/path/to/destination_directory')
This may copy the complete listing on the supply path to the vacation spot path. If the vacation spot listing does not exist, copytree()
will create it.
Be aware: If the vacation spot listing already exists, copytree()
will increase a FileExistsError
. To keep away from this, make sure that the vacation spot listing does not exist earlier than you run the perform.
Error Dealing with and Varieties of Errors
When coping with file operations in Python, it is vital to deal with potential errors. There are a lot of kinds of errors you would possibly encounter, with a few of the extra frequent ones being FileNotFoundError
, PermissionError
, and IsADirectoryError
.
You possibly can deal with these errors utilizing Python’s attempt/besides
blocks like this:
import shutil
attempt:
shutil.copy2('/path/to/source_file', '/path/to/destination_file')
besides FileNotFoundError:
print("The supply or vacation spot file was not discovered.")
besides PermissionError:
print("You do not have permission to entry the supply or vacation spot file.")
besides IsADirectoryError:
print("The supply or vacation spot path you offered is a listing, not a file.")
On this instance, we’re utilizing the shutil.copy2()
perform to repeat a file. If the supply or vacation spot file does not exist, a FileNotFoundError
is raised. If the consumer does not have the mandatory permissions, a PermissionError
is raised. If the supply or vacation spot path is a listing as an alternative of a file, an IsADirectoryError
is raised. Catching every error on this method means that you can deal with every case within the applicable method.
Conclusion
On this article, we have now confirmed other ways to repeat recordsdata in Python. We noticed how the Python’s built-in shutil
and os
modules present us with easy and highly effective instruments for file copying. We additionally confirmed the best way to make use of wildcards to repeat a number of recordsdata and the best way to copy complete directories.
And eventually, we checked out just a few several types of frequent errors which may happen throughout file operations and the best way to deal with them. Understanding these errors will help you debug your code extra effectively and stop points, like knowledge loss.