我有这段代码:
def traverse_dir(fd):
for dir_path,subpaths,files in os.walk(fd):
print dir_path,subpaths
for file in files:
print "file:%s" %file
def traverse_func(arg,dirname,files):
print dirname
for file in files:
print "file:%s" %file
os.path.walk(r".",traverse_func,())
我应该使用os.walk()
还是os.path.walk()
,为什么?
或者还有其他更好的方法吗?
答案 0 :(得分:2)
这取决于您使用的Python版本。在Python 2中有os.path.walk()
(docs)但在Python 3中已被弃用并替换为os.walk()
(docs)。
您声称在评论中使用的Python(x,y),seems to be based on Python 2。
答案 1 :(得分:1)
os.walk(dir)返回一个元组,你必须解包。
for a, b, c in os.walk(dir):
print("{} contains the directories {} and the files {}".format(a, b, c))
真的很简单。
对于Python 3.6+,您可以稍微简化一下:
for a, b, c in os.walk(dir):
print(f"{a} contains the directories {b} and the files {c}")
答案 2 :(得分:1)
{3}}函数已弃用,在Python 3中不再可用。出于这个原因,您应该更喜欢os.path.walk()
。
os.walk()
也可以通过将followlinks
参数设置为True
来跟踪目录的符号链接。要对os.path.walk()
执行相同操作,您必须专门检查每个目录是否为sym链接,并自行解决。 os.walk()
还有其他几个可能有用的选项,所以总体来说,选择它os.path.walk()
。
答案 3 :(得分:0)
你可以实现相同的。
os.listdir() + 递归
def traverseFolder(ROOT):
for entry in os.listdir(ROOT):
path = os.path.join(ROOT,entry)
if os.path.isdir(path):
traverseFolder(path) #call to process sub-directory
else:
fhand = open(path,'r')
data = fhand.read()
......
traverseFolder('path/someFolder')