shutil.move() Error ([Errno 17] File exists:) on win32

Hans Nowak hans at zephyrfalcon.org
Tue Dec 16 15:41:33 EST 2003


bmgz wrote:
> I am have made a simple script that moves all desktop clutter (ie files that
> are not *.lnk) to a specified folder
> eg. c:\myhome\mydocs\desktopdebris\2003-12-16
> 
> ----------------------------------------------------------------------------
> -----------------
> import re, os, time, shutil
> os.chdir(os.environ['HOMEDRIVE']+os.environ['HOMEPATH']+"\\Desktop")
> DESKTOP =
> os.listdir(os.environ['HOMEDRIVE']+os.environ['HOMEPATH']+"\\Desktop")
> TODAYDIR = "E:\\My Documents\\desktop_debris\\"+time.strftime('%Y-%m-%d')
> 
> 
> if not os.path.exists(TODAYDIR):
>     os.mkdir(TODAYDIR)
> 
> for i in range(len(DESKTOP)):
>     if not re.search("\.lnk$", DESKTOP[i]):
>         shutil.move(DESKTOP[i],TODAYDIR)
> ----------------------------------------------------------------------------
> -----------------------
> 
> this works fine for FILES on the desktop, but when a FOLDER is present the
> script exits with the following error:
> 
> Traceback (most recent call last):
>   File "E:\My Documents\python\cleanup_desktop.py", line 12, in ?
>     shutil.move(DESKTOP[i],TODAYDIR)
>   File "C:\Program Files\Python-2.3\lib\shutil.py", line 167, in move
>     copytree(src, dst, symlinks=True)
>   File "C:\Program Files\Python-2.3\lib\shutil.py", line 101, in copytree
>     os.mkdir(dst)
> OSError: [Errno 17] File exists: 'E:\\My
> Documents\\desktop_debris\\2003-12-16'

I'm not sure, but I think it kinda works like this.

When you move a file, you can do:

   shutil.move(filename, directory)

e.g.

   shutil.move('test.txt', 'c:/temp')

This moves the file to the c:/temp directory.  Nothing surprising here.

However, when moving a directory, this is a bit different.  shutil.move(dir1, 
dir2) doesn't work if dir2 already exists.  Rather, you need to specify the 
*new name* of the directory:

   shutil.move('c:/dir1', 'c:/temp')
   # WRONG if c:/temp already exists

   shutil.move('c:/dir1', 'c:/temp/dir1')
   # does what you want

HTH,

-- 
Hans (hans at zephyrfalcon.org)
http://zephyrfalcon.org/







More information about the Python-list mailing list