1. ホーム
  2. python

[解決済み] glob.globモジュールでサブフォルダを検索するには?重複

2022-05-02 03:48:24

質問

あるフォルダの中の一連のサブフォルダを開いて、いくつかのテキストファイルを見つけて、そのテキストファイルの何行かを印刷したいのですが、どうすればいいですか?私はこれを使用しています。

configfiles = glob.glob('C:/Users/sam/Desktop/file1/*.txt')

しかし、これではサブフォルダにもアクセスできません。同じコマンドを使ってサブフォルダーにもアクセスする方法をご存知の方はいらっしゃいますか?

解決方法は?

Python 3.5 以降では、新しい再帰的な **/ という関数があります。

configfiles = glob.glob('C:/Users/sam/Desktop/file1/**/*.txt', recursive=True)

いつ recursive が設定されています。 ** の後にパス区切り文字が続くと、0個以上のサブディレクトリにマッチします。

以前のPythonのバージョンでは glob.glob() は、サブディレクトリ内のファイルを再帰的にリストアップすることができません。

その場合、私は os.walk() と組み合わせて fnmatch.filter() の代わりに

import os
import fnmatch

path = 'C:/Users/sam/Desktop/file1'

configfiles = [os.path.join(dirpath, f)
    for dirpath, dirnames, files in os.walk(path)
    for f in fnmatch.filter(files, '*.txt')]

これは、ディレクトリを再帰的に走査し、マッチするすべての絶対パス名を返します。 .txt ファイルを作成します。この中で 特定 の場合は fnmatch.filter() はやりすぎかもしれないので、その場合は .endswith() をテストします。

import os

path = 'C:/Users/sam/Desktop/file1'

configfiles = [os.path.join(dirpath, f)
    for dirpath, dirnames, files in os.walk(path)
    for f in files if f.endswith('.txt')]