Как вывести список всех файлов в данном каталоге и подкаталогах? - PullRequest
0 голосов
/ 29 марта 2020

Я хочу получить путь от пользователя и перечислить имена файлов всех каталогов и подкаталогов в этом пути. До сих пор я мог получать имена файлов только для каталогов, а не подкаталогов: мне не разрешено использовать os.walk ()

import sys, os.path

l = []
def fnames(path):
    global l
    l = os.listdir(path)
    print(l)


path = '/Users/sohamphadke/Desktop'

for i in l:
    if os.path.isdir(l) == True:
        fnames(l)
    elif os.path.isdir(l) == False:
        break

Ответы [ 4 ]

0 голосов
/ 29 марта 2020

Если вам разрешено использовать pathlib ...

path = '/Users/sohamphadke/Desktop'

paths = Path(path).glob("**/*")
file_list = [p for p in paths if p.is_file()]
dir_list = [p for p in paths if p.is_dir()]

Обратите внимание paths - это генератор, так что вы можете перебирать каждый путь и проверять, является ли он файлом или каталогом в время.

0 голосов
/ 29 марта 2020

Вы можете проверить os.walk () метод, он будет выбирать дерево в соответствии с вашими требованиями.

0 голосов
/ 29 марта 2020

Вы можете использовать os.walk, чтобы пройти по пути. См. документы

import os
for root, dirs, files in os.walk(path):
    print("root: {}\ndirs: {}\nfiles: {}".format(root, dirs, files))
0 голосов
/ 29 марта 2020

glob модуль - ваш ответ!

Вы можете получить доступ к документам здесь , которые говорят:

Если рекурсивное значение истинно, шаблон « ** »будет соответствовать любым файлам и нулю или более каталогам, подкаталогам и символическим c ссылкам на каталоги. Если за шаблоном следует os.sep или os.altsep, файлы не будут совпадать

Так что вы можете сделать:

import os
import glob
paths_list = glob.glob('/Users/sohamphadke/Desktop/**/*', recursive=True)

# Separate between files and directories
dirs_list = [path for path in paths_list if os.path.isdir(path)]
files_list = [path for path in paths_list if os.path.isfile(path)]

Надеюсь, это поможет!

...