real usable file/directory operation module?

Cameron Simpson cs at zip.com.au
Thu Dec 10 22:43:25 EST 2015


On 11Dec2015 11:04, oyster <lepto.python at gmail.com> wrote:
>there is shutil module, but I find it limits the user heavily. For
>example, I want to move 2 directories "a/scene" and "c/scene" to "d",
>but there is "scene" under d already. Then shutil.move will raise
>Error, "Destination path '%s' already exists" % real_dst
>
>So is there any module, which allow me move/copy like Windows does.
>for example
>useableShutil.move('a/scene', 'd', overwite=True)

Surely the "subprocess" module, which would let you invoke the Windows copy 
command.

The reason that the stdlib doesn't offer something like that is that there are 
many many decisions one might make when overlaying one directory tree on 
another. Consult the manual entry for rsync to get a feel for how many nuances 
one might want in such a situation. The Window's "copy" command makes one set 
of choices; they may not fit many users' needs.

Instead the stdlib supports the simple "no conflicts" case (which is safe) and 
leaves it to others to solve harder problems, because there are many ways to 
"solve" those problems.

It is very easy to invoke os.walk on the "copying in" tree and compute the 
matching paths in the target directory, and then make your own decisions (make 
missing intermediate directories, overwrite existing files or only if the 
source is newer or whatever). BTW, if you go this route (write your own) then I 
suggest you give it a "no action" mode to report what it will do - that way you 
can check first before destroying your data.

Cheers,
Cameron Simpson <cs at zip.com.au>



More information about the Python-list mailing list