web-dev-qa-db-ja.com

Pythonでファイルとサブフォルダーを参照します

現在のフォルダーとそのすべてのサブフォルダーを参照して、拡張子が.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

そして最後に、すべてのファイルとそのパスを配列に入れたいと思います。そのようなことは可能ですか?

46
Blackie123

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"))]
114
Sven Marnach

私が取り組むべき同様のことがありました、そして、これは私がそれをした方法です。

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)

お役に立てれば。

7
Pragyaditya Das

newDirName = os.path.abspath(dir)を使用して、サブディレクトリの完全なディレクトリパス名を作成し、親で行ったようにその内容をリストします(つまり、newDirList = os.listDir(newDirName)

コードスニペットの別のメソッドを作成し、サブディレクトリ構造を介して再帰的に呼び出すことができます。最初のパラメーターはディレクトリパス名です。これはサブディレクトリごとに変わります。

この回答はPythonライブラリのバージョン3.1.1のドキュメントに基づいています。これの良いモデル例がPython 3.1.1ライブラリリファレンス(第10章-ファイルとディレクトリへのアクセス)。

3
NeonJack

Sven Marnachのソリューションのわずかに変更されたバージョン。


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
0
campervancoder

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
Spas