gpt4 book ai didi

python - 为什么我的递归在 os.listdir() 中不起作用,它没有转到文件夹的较低级别

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:14 25 4
gpt4 key购买 nike

下面是我的代码,好像没有进入递归函数。

#!/usr/bin/python  
import os

def rec(direc, pre):
for item in os.listdir(direc):
if os.path.isfile(item):
print pre + item + '\n'
elif os.path.isdir(item):
print pre + item + '\n'
rec(direc + '/' + item, pre + '---')
rec('.', '-')

我想要从这段代码中打印出目录层次结构。它现在所做的基本上就是打印出当前目录中的所有内容。它不会进入当前目录中的文件夹。

我想要的输出如下:因为 D 是文件夹 C 中的文件

-B
-C
----D
-E

但是它返回了我:

-B
-C
-E

我尝试了每一个命令,它们工作得很好。然而,当我把它们放在一起时,我却无法正常工作。另一件事是我知道我可以使用 os.walk 来代替,但我只是想弄清楚为什么我的代码不起作用。谢谢!

最佳答案

您的问题源于考虑不周和/或格式化的路径字符串。使用 os.path.join(),而不是连接原始字符串。并确保您始终传递绝对路径。同样,直接使用字符串方法而不是“+”通常更高效且更具可读性。考虑到这些,工作代码:

import os

def rec(direc, pre):
for item in os.listdir(direc):
checkpath = os.path.join(direc, item)
if os.path.isfile(checkpath):
print('{}{}\n'.format(pre, item))
elif os.path.isdir(checkpath):
print('{}{}\n'.format(pre, item))
rec(checkpath, '{}---'.format(pre))

rec('.', '-')

请注意:os.path.isdir() 遵循符号链接(symbolic link),因此您可能最终会陷入无限递归的情况。如果您不需要跟踪链接并希望避免这种情况,请检查 os.path.islink()。

关于python - 为什么我的递归在 os.listdir() 中不起作用,它没有转到文件夹的较低级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790689/

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