当使用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']
[]
[]
答案 0 :(得分:2)
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
只有两个空目录t1
和t2
,因此您将获得:
>>> 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
,这是给定目录中的子目录列表。您的目录t1
和t2
显然不包含任何子目录,因此是空列表。
答案 2 :(得分:0)
根据os
documentation,os.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元组中提取第一个元素并获得空列表,这意味着这些是不包含子目录的目录。