目录如何同时成为文件?

时间:2014-11-28 11:48:29

标签: python

我正在使用python os模块,并遇到了关于符号路径事物的一些障碍。

linkdir = os.path.dirname(filepath)
if not os.path.isdir(linkdir):
    if os.path.exists(linkdir):
        os.unlink(linkdir)
    os.makedirs(linkdir)

这是我完全理解问题的代码。根据书中的解释,它意味着:

如果我输入if子句,这意味着该目录不存在或是纯文件。 在这种情况下,它是后者,所以它将被删除。最后,创建目标目录。

但是我并不完全理解目录(linkdir)如何成为普通文件。我试着谷歌但是得到了答案:'因为它是符号链接'。老实说,我没有得到这么简短的答案......你会以一种可以理解的方式向我解释它吗?

2 个答案:

答案 0 :(得分:1)

代码尝试清除正在创建的目录的方式。 filepath中的值只是一个字符串。它实际上并没有连接到文件系统上的任何东西,但是你不能只是创建一个目录而不检查是否有任何东西在那里。

如果/foo/bar/spam.html中的值为filepath,则代码执行此操作:

  • 提取该路径的目录部分/foo/bar。这仍然只是一个字符串,与实际的文件系统没什么关系。

  • 测试/foo/bar是否是os.path.isdir()文件系统上的实际目录。如果该位置存在现有目录,则完成任务,完成任务。

  • 如果目录,则测试{/ 1}} 是否存在。我们已经打折它是一个目录,所以如果/foo/bar存在 ,它必须是其他。通常这意味着它是一个文件。然后代码将删除那些为目录腾出的东西。

这与符号链接没有多大关系; /foo/bar也可能是一个已存在的符号链接,但这并不重要。重要的是,/foo/bar文件系统上实际存在的内容最好是一个目录,否则需要删除它才能在那里创建目录。

答案 1 :(得分:-1)

因为os.path.dirname(filepath)只根据斜杠将字符串“filepath”拆分为head和tail。 它不会检查磁头是否是现有目录。

例如,我们在工作目录中有一个名为“a”的文件。

(1)代码

os.path.dirname("a/a")

返回“a”。

(2)但是,如果我们通过isdir检查它是错误的

(3)如果我们通过isfile

检查它,它返回true