os.walk的dirname中的空列表是什么?

时间:2016-01-01 13:11:18

标签: python python-3.5 os.walk

当使用python 3.5 os.walk()并查看dirname输出时,我得到了很多空列表(返回[ ])。我不明白为什么。

import os
tdir = '/home/pontiac/testdir'

gen0 = os.walk(tdir)
print(next(gen0)[1])
print(next(gen0)[1])

gen1 = os.walk(tdir)

for ea in gen1:
    print(ea[1])

输出:

['t2', 't1']

[]

['t2', 't1']

[]

[]

3 个答案:

答案 0 :(得分:2)

引自Python Documentation

  

os.walk(top, topdown=True, onerror=None, followlinks=False)
  通过从上到下遍历树来生成目录树中的文件名   或自下而上。对于以目录顶部为根的树中的每个目录   (包括顶部本身),它产生一个 3元组(dirpath,dirnames,   文件名)

     

dirpath是一个字符串,即目录的路径。 dirnames是一个列表   dirpath中子目录的名称(不包括“。”和“..”)。   filenames是非目录文件名称的列表   dirpath 即可。请注意,列表中的名称不包含路径组件。   获取完整路径(以top开头)到文件或目录中   dirpath,do os.path.join(dirpath,name)。

由于testdir只有两个空目录t1t2,因此您将获得:

>>> import os
>>> t = '/home/pontiac/testdir'
>>> for root, dirs, files in os.walk(t):
    print root, dirs, files


/home/testdir ['t1', 't2'] []
# ^rootdir     ^dirs list  ^files in rootdir 
/home/testdir/t1 [] []
/home/testdir/t2 [] []

答案 1 :(得分:0)

致电os.walk会返回元组(dirpath, dirnames, filenames)。您打印此元组的[1]元素dirnames,这是给定目录中的子目录列表。您的目录t1t2显然不包含任何子目录,因此是空列表。

答案 2 :(得分:0)

根据os documentationos.walk返回的是3元组(dirpath, dirnames, filenames)

我们假设您有一个目录testdir

testdir
      |- dir1
      |    |- file3.txt
      |- dir2
      |- file1.txt
      |- file2.txt

然后循环os.walk('path/to/testdir')返回的生成器将产生以下元组:

('path/to/testdir', ['dir2', 'dir1'], ['file3.txt', 'file1.txt', 'file2.txt'])
('path/to/testdir/dir2', [], [])
('path/to/testdir/dir1', [], ['file3.txt'])

由于你从3元组中提取第一个元素并获得空列表,这意味着这些是不包含子目录的目录。