我正在使用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)如何成为普通文件。我试着谷歌但是得到了答案:'因为它是符号链接'。老实说,我没有得到这么简短的答案......你会以一种可以理解的方式向我解释它吗?
答案 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