【发布时间】:2020-04-07 04:05:24
【问题描述】:
我写了一个函数来递归列出所有文件和目录。
import os
def walk_dir(path,dir_list=[],file_list=[]):
for fname in os.listdir(path):
fullname = os.path.join(path, fname)
if os.path.isdir(fullname) :
dir_list.append(fullname)
walk_dir(fullname,dir_list,file_list)
elif os.path.isfile(fullname) :
file_list.append(fullname)
return {'dir':dir_list,'file':file_list}
它返回一个字典。
我创建了一个目标目录来测试我的代码。
mkdir -p /tmp/test
cd /tmp/test
mkdir -p test{1..3}
cd test1
touch /test1/test1{1..3}
cd ../test2
touch /test2/test2{1..2}
这是我要尝试的目标目录:
tree /tmp/test
/tmp/test
├── test1
│ ├── test11
│ ├── test12
│ └── test13
├── test2
│ ├── test21
│ └── test22
├── test3
获取/tmp/test中的所有目录和文件。
x = walk_dir('/tmp/test')
x['dir']
['/tmp/test/test1', '/tmp/test/test3', '/tmp/test/test2']
现在将 x 重置为 {}--字典不包含任何内容。
x = {}
x
{}
x['dir']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'dir'
dir_list
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dir_list' is not defined
也许每个变量都被初始化为无。
第二次获取文件和目录:
x = walk_dir('/tmp/test')
x['dir']
['/tmp/test/test1', '/tmp/test/test3', '/tmp/test/test2', '/tmp/test/test1', '/tmp/test/test3', '/tmp/test/test2']
我已将x 重置为{},为什么 x['dir'] 包含 6 个目录而不是 3 个目录?
【问题讨论】:
标签: python dictionary recursion