How do you copy files from one location to another?
John Salerno
johnjsal at gmail.com
Fri Jun 17 19:28:54 EDT 2011
On Jun 17, 5:15 pm, Ethan Furman <et... at stoneleaf.us> wrote:
> John Salerno wrote:
> > On Jun 17, 2:23 pm, Terry Reedy <tjre... at udel.edu> wrote:
>
> >> If you follow the second part of Greg's suggestion 'or one of the other
> >> related function in the shutil module', you will find copytree()
> >> "Recursively copy an entire directory tree rooted at src. "
>
> > Yeah, but shutil.copytree says:
>
> > "The destination directory, named by dst, must not already exist"
>
> > which again brings me back to the original problem. All I'm looking
> > for is a simple way to copy files from one location to another,
> > overwriting as necessary, but there doesn't seem to be a single
> > function that does just that.
>
> If you don't mind deleting what's already there:
>
> shutil.rmtree(...)
> shutil.copytree(...)
>
> If you do mind, roll your own (or borrow ;):
>
> 8<-------------------------------------------------------------------
> #stripped down and modified version from 2.7 shutil (not tested)
> def copytree(src, dst):
> names = os.listdir(src)
> if not os.path.exists(dst): # no error if already exists
> os.makedirs(dst)
> errors = []
> for name in names:
> srcname = os.path.join(src, name)
> dstname = os.path.join(dst, name)
> try:
> if os.path.isdir(srcname):
> copytree(srcname, dstname, symlinks, ignore)
> else:
> copy2(srcname, dstname)
> except (IOError, os.error), why:
> errors.append((srcname, dstname, str(why)))
> # catch the Error from the recursive copytree so that we can
> # continue with other files
> except Error, err:
> errors.extend(err.args[0])
> if errors:
> raise Error(errors)
> 8<-------------------------------------------------------------------
>
> ~Ethan~
Thanks. Deleting what is already there is not a problem, I was just
hoping to have it overwritten without any extra steps, but that's no
big deal.
More information about the Python-list
mailing list