OSError:目录不是空的,如何修复?

时间:2011-09-20 14:59:10

标签: python file exception directory rename

我只是想编写一个小应用程序,它从名为'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

为了防止这种情况发生,有没有办法解决这个问题?感谢。

3 个答案:

答案 0 :(得分:14)

修改:正确的工具是shutil.move

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

假设path_paths[-1]是您要重命名的绝对目录,data_data是您要将其重命名为的绝对目录名。

目标目录必须不存在才能生效。这两个位置不需要位于同一个文件系统上。


旧答案:使用os.renames代替os.rename

它将递归创建任何所需的目录。

答案 1 :(得分:1)

使用shutil要容易得多。

答案 2 :(得分:0)

十年后,..可能会取代分割路径的方式

path_paths = path.rsplit('/')

path_paths = os.path.split(path)[1]

对于重命名问题:

os.rename('myfolder/oldname', 'myfolder/newname')