56
votes

First thing I have to mention here, I'm new to python.

Now I have a file located in:

a/long/long/path/to/file.py

I want to copy to my home directory with a new folder created:

/home/myhome/new_folder

My expected result is:

/home/myhome/new_folder/a/long/long/path/to/file.py

Is there any existing library to do that? If no, how can I achieve that?

2
there you go, this already explains it stackoverflow.com/questions/1994488/… - Samuele Mattiuzzo
@Anderson Green: it is not a duplicate. The accepted answers if swapped won't work for the questions. They are closely related (copying stuff in Python); it doesn't make them identical. Please, read the full the question and look at the answers before voting to close next time. - jfs
it's a while ago, but generally speaking a good tactic if there is a similar but not identical question, is to reference the existing question in one's own question, and state how one's own question is different. - Hugh Perkins

2 Answers

75
votes

To create all intermediate-level destination directories you could use os.makedirs() before copying:

import os
import shutil

srcfile = 'a/long/long/path/to/file.py'
dstroot = '/home/myhome/new_folder'


assert not os.path.isabs(srcfile)
dstdir =  os.path.join(dstroot, os.path.dirname(srcfile))

os.makedirs(dstdir) # create all directories, raise an error if it already exists
shutil.copy(srcfile, dstdir)
25
votes

take a look at shutil. shutil.copyfile(src, dst) will copy a file to another file.

Note that shutil.copyfile will not create directories that do not already exist. for that, use os.makedirs