OSError: Директория не пуста поднята, как исправить? - PullRequest
6 голосов
/ 20 сентября 2011

Я просто пытаюсь написать небольшое приложение, которое принимает значение из файла с именем «DATA.DAT» и переименовывает папку, содержащую этот файл с этим значением.

Сценарий .py запускается вдругая папка и позволяет пользователю определить путь.Чтобы дать вам лучшее представление, пользовательский путь должен быть таким (на компьютере Mac): «/ Users / User / Desktop / FOLDER», а «FOLDER» должен содержать «DATA.DAT».

Вот какмаленькая часть исходного кода выглядит так:

try:
    data = open('DATA.DAT').read()

    data_data = data[12:17]
    path_paths = path.rsplit('/')
    basepath = '/'.join(path_paths[:-1])
    chdir(basepath)

    if path_paths[-1] <> data_data:
        rename(path_paths[-1], data_data)
        raw_input('Folder name has been corrected! Thank you.')
        quit()
    else:
        print('Folder name was already correct! Thank you.')
        quit()
except IndexError:
    raw_input('ERROR!')
    quit()

Ну, это работает;но возникает и возникает исключение, когда «FOLDER» содержит более одного файла (на самом деле «FOLDER» должен содержать только «DATA.DAT» и другие папки. Это не создает проблем.) ...

Traceback (most recent call last):
  File "/Users/User/Desktop/example.py", line 72, in <module>
    rename(path_paths[-1], data_data)
OSError: [Errno 66] Directory not empty

Чтобы предотвратить это, есть ли способ это исправить?Спасибо.

Ответы [ 2 ]

14 голосов
/ 20 сентября 2011

Редактировать: Правильный инструмент - shutil.move:

shutil.move(path_paths[-1], data_data)

при условии, что path_paths[-1] - это абсолютный каталог, который вы хотите переименовать, и data_data - это абсолютное имя каталога, в которое вы хотите его переименовать.

Целевой каталог еще не должен существовать , чтобы это работало.Два местоположения не обязательно должны находиться в одной и той же файловой системе.


Старый ответ: используйте os.renames вместо os.rename.

Это будетрекурсивно создавать любые необходимые каталоги.

1 голос
/ 20 сентября 2011

Гораздо проще использовать shutil.

...