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

File exists - no such file

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 是一样的,但我发现上面的代码不起作用。我只想知道为什么,仅此而已。

问题是 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,这样就不会那么混乱了。