Просмотр файлов и подпапок в Python - PullRequest
43 голосов
/ 28 апреля 2011

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

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 ]

109 голосов
/ 28 апреля 2011

Вы можете использовать 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"))]
6 голосов
/ 11 июля 2018

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

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)

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

3 голосов
/ 28 апреля 2011

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

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

Этот ответ основан на документации по версии 3.1.1 библиотеки Python. Хороший пример этого в действии приведен на стр. 228 Справочника по библиотекам Python 3.1.1 (Глава 10 - Доступ к файлам и каталогам). Удачи!

0 голосов
/ 12 сентября 2018

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

for i in os.scandir(path):
    if i.is_file():
        print('File: ' + i.path)
    elif i.is_dir():
        print('Folder: ' + i.path)
0 голосов
/ 06 января 2014

Слегка измененная версия решения Свена Марнача.


import os</p>

<p>folder_location = 'C:\SomeFolderName'
file_list = create_file_list(folder_location)</p>

<p>def create_file_list(path):
    return_list = []</p>

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

...