gpt4 book ai didi

python - 返回目录中所有文件的列表问题

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:37 24 4
gpt4 key购买 nike

我仍在学习 Python 入门类(class)。我正在尝试编写一个程序,该程序使用递归返回目录中所有文件名的列表,但由于某种原因它没有按预期工作。这是我的代码:谢谢

from pathlib import Path
p = Path('/Users/name/Documents/')

def directory_files (dirct: Path) -> list:
Lf = []
if dirct.is_file:
Lf.append(dirct)
else:
for d in list(dirct.iterdir()):
directory_files(d)

return Lf

最佳答案

你忘了调用 is_file,如果你想用文件填充你的列表,你需要检查 dirct 是否是一个目录,不是文件就不行一个目录。您还可以简单地扩展您的列表,在每个元素上递归:

def directory_files(dirct: Path) -> list:
Lf = []
if dirct.is_dir():
for d in dirct.iterdir():
Lf.extend(directory_files(d))
else:
Lf.append(dirct)
return Lf

演示:

In [6]: ls
bar.txt foo.txt test2/

In [7]: p = Path(".")

In [8]: directory_files(p)
Out[8]:
[PosixPath('foo.txt'),
PosixPath('bar.txt'),
PosixPath('test2/bar2.txt'),
PosixPath('test2/foo2.txt')]

如果您只需要名称,请使用 .name 属性:

def directory_files (dirct: Path) -> list:
Lf = []
if dirct.is_dir():
for d in dirct.iterdir():
Lf.extend(directory_files(d))
else:
Lf.append(dirct.name)
return Lf

演示:

In [10]: directory_files(p)
Out[10]: ['foo.txt', 'bar.txt', 'bar2.txt', 'foo2.txt']

is_fileis_dir 一样是需要调用的方法,if dirct.is_file 是检查 dirct.is_file 是对方法的引用 True 总是如此,parens is_file() 实际上调用了该方法,然后返回一个 bool 值。

如果你想明确地检查文件你还需要添加一个is_file,例如一个命名管道不是一个目录但不会通过is_file测试所以:

def directory_files(dirct: Path) -> list:
Lf = []
if dirct.is_dir():
for d in dirct.iterdir():
Lf.extend(directory_files(d))
elif dirct.is_file():
Lf.append(dirct.name)
return Lf

您可以在输出中看到差异:

In [27]: ls
bar.txt foo_pipe| foo.txt test2/

In [28]: p = Path(".")

In [29]: directory_files1(p) # has if dirct.is_file()
Out[29]:
[PosixPath('foo.txt'),
PosixPath('bar.txt'),
PosixPath('test2/bar2.txt'),
PosixPath('test2/foo2.txt')]

In [30]: directory_files(p)
Out[30]:
[PosixPath('foo.txt'),
PosixPath('bar.txt'),
PosixPath('test2/bar2.txt'),
PosixPath('test2/foo2.txt'),
PosixPath('foo_pipe')]

您可能会发现 rcviz一个很好的工具,可以帮助您理解递归,它可以创建一个图形,其中:

边按执行遍历的顺序编号。 2. 边缘从黑色到灰色着色以指示遍历顺序:首先是黑色边缘,最后是灰色边缘。

enter image description here

这里有点难看,但如果你点击图片,应该会更容易看到。

关于python - 返回目录中所有文件的列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com