文件存在 - 没有这样的文件

时间:2015-10-20 11:42:45

标签: python-2.7 path filenames

import os

myDir = "C:\\temp\\a"


for root, dirs, files in os.walk(myDir):
  for file in files:
    # fname = os.path.join(root, file) # this works fine, yeah!
    fname = os.path.join(myDir, file)
    print ("%r" % (fname))
    src = os.path.isfile(fname)
    if src == False:
      print ("%r :Fail" % (fname))
    f = open(fname,"r")
    f.close()

我期望fname的两个版本是相同的,但我发现上述代码不起作用的困难方式。我只是想知道为什么,就是这样。

1 个答案:

答案 0 :(得分:2)

问题是os.walk(myDir)以递归的方式遍历所有子目录!当walk下降到子目录时,root将成为该目录,而myDir仍然是搜索开始的根目录。

假设您有一个文件C:\temp\a\b\c\foo.txt。当os.walk下降到c时,myDir仍为C:\temp\arootC:\temp\a\b\c。然后os.path.join(root, file)会产生C:\temp\a\b\c\foo.txt,而os.path.join(myDir, file)会产生C:\temp\a\foo.txt

您可能希望将myDir变量分别重命名为root,将root重命名为current,这样可以减少混淆。