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

B

bmgz

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):
shutil.move(DESKTOP,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,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'


It seems that the shutil.move() function is trying to recreate the target
directory? Is their another module one could use in this case?
(shutil.copy() then delete() also gives problems - then again that IS
move()..)
 
H

Hans Nowak

bmgz said:
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):
shutil.move(DESKTOP,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,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,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,905
Latest member
Kristy_Poole

Latest Threads

Top