2012-01-24 2 views
2

Это мой первый опыт использования python, и я продолжаю работать с ошибкой 183. Созданный мной сценарий ищет в сети все «.py» файлы и копирует их на мой резервный диск. Пожалуйста, не смейтесь над моим сценарием, поскольку это мой первый.Ошибка [183] ​​при использовании python os.rename

Любой ключ к тому, что я делаю неправильно в сценарии?

import os 
import shutil 
import datetime 

today = datetime.date.today() 
rundate = today.strftime("%Y%m%d") 

for root,dirr,filename in os.walk("p:\\"): 
    for files in filename: 
     if files.endswith(".py"): 
      sDir = os.path.join(root, files) 
      dDir = "B:\\Scripts\\20120124" 
      modname = rundate + '_' + files 
      shutil.copy(sDir, dDir) 
      os.rename(os.path.join(dDir, files), os.path.join(dDir, modname)) 
      print "Renamed %s to %s in %s" % (files, modname, dDir) 
+0

Не могли бы вы отредактировать исходное сообщение с копией вставить точную трассировку стека? Разве это не ошибка «файл уже существует»? –

+0

Haha script! :) только шучу! –

+1

Вы должны, по крайней мере, проверить, существует ли файл в пункте назначения. Ваша лучшая ставка, однако, заключается в том, чтобы взглянуть на использование rsync и значительно упростить ваш скрипт (потому что другие сделали тяжелую работу для вас) – GoingTharn

ответ

3

Я предполагаю, что вы запускаете скрипт на окнах. Согласно the list of windows error codes ошибка 183 равна ERROR_ALREADY_EXISTS

Так что, я думаю, скрипт терпит неудачу, потому что вы пытаетесь переименовать файл поверх существующего файла.

Возможно, вы используете скрипт несколько раз в день? Это приведет к тому, что все файлы-адресаты уже существуют, поэтому переименование не выполняется, когда скрипт запускается еще раз.

Если вы специально хотите перезаписать файлы, вы должны, вероятно, удалить их с помощью os.unlink.

+0

В основном сценарий будет запускаться раз в месяц, а затем архивироваться. Как сценарий настроен для копирования файла сначала, а затем переименовать, по крайней мере, это то, что думает, что происходит, правильно? –

+0

Правильно, но если вы получаете ошибку 183 в момент, когда пытаетесь переименовать, мне кажется, что имя файла, которое вы пытаетесь переименовать, уже существует. Либо это, либо ошибка происходит при копировании файла, и в этом случае файл, который вы копируете, существует. Возможно, что-то еще идет не так, но очевидным ответом будет то, что сценарий запускается более одного раза в день. – obmarg

Смежные вопросы