Просмотр файлов и вложенных папок в Python

Я хотел бы просмотреть текущую папку и все ее подпапки и получить все файлы.htm/.расширения html. Я узнал, что можно узнать, является ли объект dir или файл, как это:

import os

dirList = os.listdir("./") # current directory
for dir in dirList:
  if os.path.isdir(dir) == True:
    # I don't know how to get into this dir and do the same thing here
  else:
    # I got file and i can regexp if it is .htm|html

и, в конце концов, я хотел бы иметь все файлы и их пути в массиве. Возможно ли что-то подобное?

5 ответов


можно использовать os.walk() рекурсивно перебирать каталог и все его подкаталоги:

for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith((".html", ".htm")):
            # whatever

построить список этих имен, вы можете использовать список понимание:

htmlfiles = [os.path.join(root, name)
             for root, dirs, files in os.walk(path)
             for name in files
             if name.endswith((".html", ".htm"))]

использовать newDirName = os.path.abspath(dir) чтобы создать полный путь к каталогу для подкаталога, а затем перечислить его содержимое, как вы сделали с родителем (т. е. newDirList = os.listDir(newDirName))

вы можете создать отдельный метод фрагмента кода и вызвать его рекурсивно через структуру подкаталогов. Первый параметр-путь к каталогу. Это изменится для каждого подкаталога.

этот ответ основан на документации версии 3.1.1 библиотеки Python. Есть хорошая модель пример этого в действии на странице 228 ссылки на библиотеку Python 3.1.1 (Глава 10-доступ к файлам и каталогам). Удачи!


У меня была похожая вещь для работы, и вот как я это сделал.

import os

rootdir = os.getcwd()

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        #print os.path.join(subdir, file)
        filepath = subdir + os.sep + file

        if filepath.endswith(".html"):
            print (filepath)

надеюсь, что это помогает.


слегка измененную версию решения Свен Марнах по..


import os

folder_location = 'C:\SomeFolderName' file_list = create_file_list(folder_location)

def create_file_list(path): return_list = []

for filenames in os.walk(path): for file_list in filenames: for file_name in file_list: if file_name.endswith((".txt")): return_list.append(file_name) return return_list


в python 3 Вы можете использовать ОС.scandir():

for i in os.scandir(path):
    if i.is_file():
        print('File: ' + i.path)
    elif i.is_dir():
        print('Folder: ' i.path)