目录中所有文件的列表?

2024-04-28 04:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能帮我创建一个函数,它将使用pathlib库创建某个目录下所有文件的列表?

这里,我有一个:

enter image description here

我有

  • c:\desktop\test\A\A.txt

  • c:\desktop\test\B\B_1\B.txt

  • c:\desktop\test\123.txt

我希望有一个具有上述路径的列表,但是我的代码返回一个嵌套列表。

这是我的代码:

from pathlib import Path

def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():

           file_list.append(x)
        else:

           file_list.append(searching_all_files(directory/x))

    return file_list


p = Path('C:\\Users\\akrio\\Desktop\\Test')

print(searching_all_files(p))

希望有人能纠正我。


Tags: path代码intesttxt列表forsearching
3条回答

使用glob列出所有文件和目录。然后过滤掉。

p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*')
files = [x for x in p if x.is_file()]

您可以使用os.listdir()。它将为您提供目录中的所有内容—文件和目录。

如果只需要文件,可以使用os.path将其过滤掉:

from os import listdir
from os.path import isfile, join
onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))]

或者您可以使用os.walk(),它将为它访问的每个目录生成两个列表-为您拆分成文件和目录。如果你只想要最上面的目录,你可以在它第一次产生时就打破它

from os import walk
files = []
for (dirpath, dirnames, filenames) in walk(mypath):
    files.extend(filenames)
    break
from pathlib import Path
from pprint import pprint

def searching_all_files(directory):
    dirpath = Path(directory)
    assert(dirpath.is_dir())
    file_list = []
    for x in dirpath.iterdir():
        if x.is_file():
            file_list.append(x)
        elif x.is_dir():
            file_list.extend(searching_all_files(x))
    return file_list

pprint(searching_all_files('.'))

相关问题 更多 >