gpt4 book ai didi

python - Python 中 os.scandir() 目录树中的条目(文件和文件夹)列表

转载 作者:行者123 更新时间:2023-12-02 15:49:43 24 4
gpt4 key购买 nike

我曾使用“os.walk()”来列出目录树中的所有子文件夹和文件,但听说“os.scandir()”的速度提高了 2 到 20 倍。所以我尝试了这段代码:

def tree2list (directory:str) -> list:
import os
tree = []
counter = 0
for i in os.scandir(directory):
if i.is_dir():
counter+=1
tree.append ([counter,'Folder', i.name, i.path]) ## doesn't list the whole tree
tree2list(i.path)
#print(i.path) ## this line prints all subfolders in the tree
else:
counter+=1
tree.append([counter,'File', i.name, i.path])
#print(i.path) ## this line prints all files in the tree
return tree

测试时:

    ## tester
folder = 'E:/Test'
print(tree2list(folder))

我只得到了根目录的内容,没有得到树层次结构下面的子目录的内容,而上面代码中的所有打印语句都工作正常。

[[1, 'Folder', 'Archive', 'E:/Test\\Archive'], [2, 'Folder', 'Source', 'E:/Test\\Source']]

我做错了什么?我该如何解决?!

最佳答案

您的代码几乎可以工作,只需要稍作修改:

def tree2list(directory: str) -> list:
import os
tree = []
counter = 0
for i in os.scandir(directory):
if i.is_dir():
counter += 1
tree.append([counter, 'Folder', i.name, i.path])
tree.extend(tree2list(i.path))
# print(i.path) ## this line prints all subfolders in the tree
else:
counter += 1
tree.append([counter, 'File', i.name, i.path])
# print(i.path) ## this line prints all files in the tree
return tree

虽然我不明白 counter 变量的用途是什么,所以我可能会删除它。

此外,我必须同意@Gelineau 的观点,即您的方法大量使用数组副本,因此很可能非常慢。在他的回复中,基于迭代器的方法更适合大量文件。

关于python - Python 中 os.scandir() 目录树中的条目(文件和文件夹)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72938098/

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