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的两个版本是相同的,但我发现上述代码不起作用的困难方式。我只是想知道为什么,就是这样。
答案 0 :(得分:2)
问题是os.walk(myDir)
以递归的方式遍历所有子目录!当walk
下降到子目录时,root
将成为该目录,而myDir
仍然是搜索开始的根目录。
假设您有一个文件C:\temp\a\b\c\foo.txt
。当os.walk
下降到c
时,myDir
仍为C:\temp\a
,root
为C:\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
,这样可以减少混淆。