【问题标题】:OSError: Directory not empty raised, how to fix?OSError:目录不是空的,如何解决?
【发布时间】:2011-11-21 04:27:54
【问题描述】:

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

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

【问题讨论】:

  • chdir() 在重命名之前退出目录会发生什么?这是什么平台?

标签: python file exception directory rename


【解决方案1】:

编辑:正确的工具是shutil.move

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

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

目标目录必须不存在才能正常工作。这两个位置不需要在同一个文件系统上。


旧答案:使用os.renames 而不是os.rename

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

【讨论】:

  • 我已经尝试过了,但它给了我完全相同的错误: Traceback (last recent call last): File "/Users/User/Desktop/example.py", line 72, in renames(path_paths[-1], data_data) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py”,第 199 行,重命名中 rename(old, new) OSError: [ Errno 66] 目录不为空
  • 谢谢您,现在可以使用了!这里是一个例子: path_paths[-1] = '/Users/User/Desktop/lol' data_data = '/Users/User/Desktop/asd' ...我说的对吗?
  • @PyGuy 在我看来是正确的,只要 asd 目录不存在。
【解决方案2】:

使用shutil要容易得多。

【讨论】:

    【解决方案3】:

    虽然十年后.. 可以替代分路的方式

    path_paths = path.rsplit('/')
    

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

    对于重命名问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-07
      • 2018-12-31
      • 2023-03-31
      • 2013-08-02
      • 2013-01-02
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多