web-dev-qa-db-ja.com

ディレクトリのすべてのファイルを一覧表示する方法

Pythonでディレクトリの全ファイルを一覧表示し、それらをlistに追加するにはどうすればよいですか?

3472
duhhunjonn

os.listdir() はディレクトリにあるもの全て - ファイルとディレクトリ - を手に入れます。

just filesが必要な場合は、 os.path を使用してこれを絞り込むことができます。

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

または os.walk() を使用すると、ディレクトリごとに2つのリストが作成され、ファイルとディレクトリに分割されます。一番上のディレクトリだけが欲しいのなら、最初のディレクトリを壊すだけでいいのです。

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
    f.extend(filenames)
    break

そして最後に、その例が示すように、あるリストを別のリストに追加すると、 .extend() または

>>> q = [1, 2, 3]
>>> w = [4, 5, 6]
>>> q = q + w
>>> q
[1, 2, 3, 4, 5, 6]

個人的には.extend()が好きです

3380
pycruft

私は glob モジュールを使うことを好みます。それはパターンマッチングと展開をするからです。

import glob
print(glob.glob("/home/adam/*.txt"))

問い合わせたファイルのリストを返します。

['/home/adam/file1.txt', '/home/adam/file2.txt', .... ]
1351
adamk
import os
os.listdir("somedirectory")

"somedirectory"内のすべてのファイルとディレクトリのリストを返します。

645
sepp2k

Python 2と3を使ってファイルのリストを取得する


私も短いビデオをここで作りました: Python:ディレクトリ内のファイルのリストを取得する方法


os.listdir()

または.....現在のディレクトリ内のすべてのファイル(およびディレクトリ)を取得する方法(Python 3)

Python 3で現在のディレクトリにファイルを置くための最も簡単な方法はこれです。それは本当に簡単です。 osモジュールとlistdir()関数を使うと、そのディレクトリにファイルがあることになります(そしてそのディレクトリにある最終的なフォルダにはなりますが、walkを使用することができます。後でそれ)。

>>> import os
>>> arr = os.listdir()
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

globを使う

globは、同じ種類のファイルを選択する方が便利であることがわかりました。共通のものを使用すると便利です。次の例を参照してください。

import glob

txtfiles = []
for file in glob.glob("*.txt"):
    txtfiles.append(file)

リスト内包表記を使用

import glob

mylist = [f for f in glob.glob("*.txt")]

Os.path.abspathでフルパス名を取得する

お気づきのとおり、上記のコードではファイルのフルパスはわかりません。絶対パスが必要な場合は、os.listdir()から取得したファイルを引数として、os.pathモジュールの_getfullpathnameという別の関数を使用できます。後で確認するように、フルパスを使用する方法は他にもあります(mexmexで提案されているように、_getfullpathnameをabspathに置き換えました)。

>>> import os
>>> files_path = [os.path.abspath(x) for x in os.listdir()]
>>> files_path
['F:\\documenti\applications.txt', 'F:\\documenti\collections.txt']

walkを使用して、ファイルの種類のフルパス名をすべてのサブディレクトリに取得します。

私はこれが多くのディレクトリの中のものを見つけるのにとても便利であると思います、そしてそれは私が名前を覚えていなかったファイルを見つけるのを助けました:

import os

# Getting the current work directory (cwd)
thisdir = os.getcwd()

# r=root, d=directories, f = files
for r, d, f in os.walk(thisdir):
    for file in f:
        if ".docx" in file:
            print(os.path.join(r, file))

os.listdir():現在のディレクトリのファイルを取得する(Python 2)

Python 2では、カレントディレクトリにあるファイルのリストが欲しいなら、引数を '。'にしなければなりません。 os.listdirメソッドのos.getcwd().

>>> import os
>>> arr = os.listdir('.')
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

ディレクトリツリーを上るには

>>> # Method 1
>>> x = os.listdir('..')

# Method 2
>>> x= os.listdir('/')

特定のディレクトリにあるos.listdir()ファイルを入手する(Python 2および3)

>>> import os
>>> arr = os.listdir('F:\\python')
>>> arr
['$RECYCLE.BIN', 'work.txt', '3ebooks.txt', 'documents']

Os.listdir()で特定のサブディレクトリのファイルを取得する

import os

x = os.listdir("./content")

os.walk( '。') - 現在のディレクトリ

>>> import os
>>> arr = next(os.walk('.'))[2]
>>> arr
['5bs_Turismo1.pdf', '5bs_Turismo1.pptx', 'esperienza.txt']

globモジュール - すべてのファイル

import glob
print(glob.glob("*"))

out:['content', 'start.py']

next(os.walk( '。'))およびos.path.join( 'dir'、 'file')

>>> import os
>>> arr = []
>>> for d,r,f in next(os.walk("F:\_python")):
>>>     for file in f:
>>>         arr.append(os.path.join(r,file))
...
>>> for f in arr:
>>>     print(files)

>output

F:\\_python\\dict_class.py
F:\\_python\\programmi.txt

next(os.walk( 'F:\') - フルパスを取得 - リスト内包表記

>>> [os.path.join(r,file) for r,d,f in next(os.walk("F:\\_python")) for file in f]
['F:\\_python\\dict_class.py', 'F:\\_python\\programmi.txt']

os.walk - フルパスを取得 - サブディレクトリ内のすべてのファイル

x = [os.path.join(r,file) for r,d,f in os.walk("F:\\_python") for file in f]

>>>x
['F:\\_python\\dict.py', 'F:\\_python\\progr.txt', 'F:\\_python\\readl.py']

os.listdir() - テキストファイルのみを取得する

>>> arr_txt = [x for x in os.listdir() if x.endswith(".txt")]
>>> print(arr_txt)
['work.txt', '3ebooks.txt']

glob - テキストファイルのみを取得

>>> import glob
>>> x = glob.glob("*.txt")
>>> x
['ale.txt', 'alunni2015.txt', 'assenze.text.txt', 'text2.txt', 'untitled.txt']

Globを使用してファイルのフルパスを取得する

ファイルの絶対パスが必要な場合

>>> from path import path
>>> from glob import glob
>>> x = [path(f).abspath() for f in glob("F:\*.txt")]
>>> for f in x:
...  print(f)
...
F:\acquistionline.txt
F:\acquisti_2018.txt
F:\bootstrap_jquery_ecc.txt

Globの他の用途

ディレクトリ内のすべてのファイルが必要な場合

>>> x = glob.glob("*")

リスト内のディレクトリを避けるためにos.path.isfileを使う

import os.path
listOfFiles = [f for f in os.listdir() if os.path.isfile(f)]
print(listOfFiles)

> output

['a simple game.py', 'data.txt', 'decorator.py']

からのpathlibの使用(Python 3.4)

import pathlib

>>> flist = []
>>> for p in pathlib.Path('.').iterdir():
...  if p.is_file():
...   print(p)
...   flist.append(p)
...
error.PNG
exemaker.bat
guiprova.mp3
setup.py
speak_gui2.py
thumb.PNG

リスト内包表記を使いたい場合

>>> flist = [p for p in pathlib.Path('.').iterdir() if p.is_file()]

* pathlib.Path( "。")の代わりにpathlib.Path()だけを使用することもできます。

Pathlib.Path()でglobメソッドを使う

import pathlib

py = pathlib.Path().glob("*.py")
for file in py:
    print(file)

出力:

stack_overflow_list.py
stack_overflow_list_tkinter.py

Os.walkですべてのファイルだけを取得する

import os
x = [i[2] for i in os.walk('.')]
y=[]
for t in x:
    for f in t:
        y.append(f)

>>> y
['append_to_list.py', 'data.txt', 'data1.txt', 'data2.txt', 'data_180617', 'os_walk.py', 'READ2.py', 'read_data.py', 'somma_defaltdic.py', 'substitute_words.py', 'sum_data.py', 'data.txt', 'data1.txt', 'data_180617']

次のファイルのみを取得してディレクトリ内を移動する

>>> import os
>>> x = next(os.walk('F://python'))[2]
>>> x
['calculator.bat','calculator.py']

Nextでディレクトリだけを取得してディレクトリ内を歩く

>>> import os
>>> next(os.walk('F://python'))[1] # for the current dir use ('.')
['python3','others']

walkですべてのサブディレクトリ名を取得する

>>> for r,d,f in os.walk("F:\_python"):
...  for dirs in d:
...   print(dirs)
...
.vscode
pyexcel
pyschool.py
subtitles
_metaprogramming
.ipynb_checkpoints

python 3.5以降のos.scandir()

>>> import os
>>> x = [f.name for f in os.scandir() if f.is_file()]
>>> x
['calculator.bat','calculator.py']

# Another example with scandir (a little variation from docs.python.org)
# This one is more efficient than os.listdir.
# In this case, it shows the files only in the current directory
# where the script is executed.

>>> import os
>>> with os.scandir() as i:
...  for entry in i:
...   if entry.is_file():
...    print(entry.name)
...
ebookmaker.py
error.PNG
exemaker.bat
guiprova.mp3
setup.py
speakgui4.py
speak_gui2.py
speak_gui3.py
thumb.PNG
>>>

例1:サブディレクトリにいくつのファイルがありますか?

この例では、すべてのディレクトリとそのサブディレクトリに含まれるファイルの数を調べます。

import os

def count(dir, counter=0):
    "returns number of files in dir and subdirs"
    for pack in os.walk(dir):
        for f in pack[2]:
            counter += 1
    return dir + " : " + str(counter) + "files"

print(count("F:\\python"))

> output

>'F:\\\python' : 12057 files'

例2:あるディレクトリから別のディレクトリにすべてのファイルをコピーする方法

お使いのコンピュータで、あるタイプ(デフォルト:pptx)のファイルをすべて見つけて、それらを新しいフォルダにコピーするように順序付けるスクリプト。

import os
import shutil
from path import path

destination = "F:\\file_copied"
# os.makedirs(destination)

def copyfile(dir, filetype='pptx', counter=0):
    "Searches for pptx (or other - pptx is the default) files and copies them"
    for pack in os.walk(dir):
        for f in pack[2]:
            if f.endswith(filetype):
                fullpath = pack[0] + "\\" + f
                print(fullpath)
                shutil.copy(fullpath, destination)
                counter += 1
    if counter > 0:
        print("------------------------")
        print("\t==> Found in: `" + dir + "` : " + str(counter) + " files\n")

for dir in os.listdir():
    "searches for folders that starts with `_`"
    if dir[0] == '_':
        # copyfile(dir, filetype='pdf')
        copyfile(dir, filetype='txt')


> Output

_compiti18\Compito Contabilità 1\conti.txt
_compiti18\Compito Contabilità 1\modula4.txt
_compiti18\Compito Contabilità 1\moduloa4.txt
------------------------
==> Found in: `_compiti18` : 3 files

例3:テキストファイル内のすべてのファイルを取得する方法

あなたがすべてのファイル名でtxtファイルを作成したい場合は:

import os
mylist = ""
with open("filelist.txt", "w", encoding="utf-8") as file:
    for eachfile in os.listdir():
        mylist += eachfile + "\n"
    file.write(mylist)

例:ハードドライブのすべてのファイルを含むtxt

"""We are going to save a txt file with all the files in your directory.
We will use the function walk()

"""

import os

# see all the methods of os
# print(*dir(os), sep=", ")
listafile = []
percorso = []
with open("lista_file.txt", "w", encoding='utf-8') as testo:
    for root, dirs, files in os.walk("D:\\"):
        for file in files:
            listafile.append(file)
            percorso.append(root + "\\" + file)
            testo.write(file + "\n")
listafile.sort()
print("N. of files", len(listafile))
with open("lista_file_ordinata.txt", "w", encoding="utf-8") as testo_ordinato:
    for file in listafile:
        testo_ordinato.write(file + "\n")

with open("percorso.txt", "w", encoding="utf-8") as file_percorso:
    for file in percorso:
        file_percorso.write(file + "\n")

os.system("lista_file.txt")
os.system("lista_file_ordinata.txt")
os.system("percorso.txt")

1つのテキストファイル内のC:\\のすべてのファイル

これは前のコードの短いバージョンです。別の場所から開始する必要がある場合は、ファイルの検索を開始するフォルダを変更してください。このコードは私のコンピュータ上のテキストファイルに50MBを生成し、完全パスを持つファイルで500.000行以下のものを生成します。

import os

with open("file.txt", "w", encoding="utf-8") as filewrite:
    for r, d, f in os.walk("C:\\"):
        for file in f:
            filewrite.write(f"{r + file}\n")    

特定の種類のファイルを検索する機能

import os

def searchfiles(extension='.ttf'):
    "Create a txt file with all the file of a type"
    with open("file.txt", "w", encoding="utf-8") as filewrite:
        for r, d, f in os.walk("C:\\"):
            for file in f:
                if file.endswith(extension):
                    filewrite.write(f"{r + file}\n")

# looking for ttf file (fonts)
searchfiles('ttf')
489
Giovanni Gianni

ファイルのリストのみを取得するための1行の解決策 (サブディレクトリなし):

filenames = next(os.walk(path))[2]

または絶対パス名:

paths = [os.path.join(path,fn) for fn in next(os.walk(path))[2]]
149
Remi

ディレクトリとそのすべてのサブディレクトリからフルファイルパスを取得する

import os

def get_filepaths(directory):
    """
    This function will generate the file names in a directory 
    tree by walking the tree either top-down or bottom-up. For each 
    directory in the tree rooted at directory top (including top itself), 
    it yields a 3-Tuple (dirpath, dirnames, filenames).
    """
    file_paths = []  # List which will store all of the full filepaths.

    # Walk the tree.
    for root, directories, files in os.walk(directory):
        for filename in files:
            # Join the two strings in order to form the full filepath.
            filepath = os.path.join(root, filename)
            file_paths.append(filepath)  # Add it to the list.

    return file_paths  # Self-explanatory.

# Run the above function and store its results in a variable.   
full_file_paths = get_filepaths("/Users/johnny/Desktop/TEST")

  • 上記の関数で提供したパスには3つのファイルが含まれていました。2つはルートディレクトリにあり、もう1つは "SUBFOLDER"というサブフォルダにあります。これで、こんなことができます。
  • リストを表示するprint full_file_paths

    • ['/Users/johnny/Desktop/TEST/file1.txt', '/Users/johnny/Desktop/TEST/file2.txt', '/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat']

ご希望の場合は、内容を開いて読むことも、下のコードのように拡張子が ".dat"のファイルにのみ焦点を合わせることもできます。

for f in full_file_paths:
  if f.endswith(".dat"):
    print f

/Users/johnny/Desktop/TEST/SUBFOLDER/file3.dat

117
Johnny

バージョン3.4以降、 イテレータ が組み込まれています。これは os.listdir() よりもはるかに効率的です。

pathlib バージョン3.4の新機能。

>>> import pathlib
>>> [p for p in pathlib.Path('.').iterdir() if p.is_file()]

PEP 428 によれば、 pathlib ライブラリの目的は、ファイルシステムパスとそれらに対して行われる一般的な操作を処理するための単純なクラス階層を提供することです。

os.scandir() バージョン3.5の新機能。

>>> import os
>>> [entry for entry in os.scandir('.') if entry.is_file()]

os.walk() はバージョン3.5からの os.scandir() の代わりに os.listdir() を使用し、その速度は PEP 471 によると2倍から20倍増加しました。

以下のShadowRangerのコメントを読むことをお勧めしましょう。

70
SzieberthAdam

私は adamk's answer が本当に好きでした。同じ名前のモジュールからglob()を使うことを提案します。これにより*sとのパターンマッチングが可能になります。

しかし、他の人々がコメントで指摘したように、glob()は矛盾したスラッシュの指示でつまずくことがあります。それを手助けするために、os.pathモジュールでjoin()expanduser()関数を、そしておそらくosモジュールでgetcwd()関数を使うことをお勧めします。

例として:

from glob import glob

# Return everything under C:\Users\admin that contains a folder called wlp.
glob('C:\Users\admin\*\wlp')

上記はひどいです - パスはハードコードされていて、ドライブ名とパスにハードコードされている\sの間のWindows上でのみ動作します。

from glob    import glob
from os.path import join

# Return everything under Users, admin, that contains a folder called wlp.
glob(join('Users', 'admin', '*', 'wlp'))

上記の方がうまく機能しますが、Windowsではよく見られ、他のOSではあまり見られないフォルダ名Usersに依存しています。また、特定の名前adminを持つユーザーにも依存しています。

from glob    import glob
from os.path import expanduser, join

# Return everything under the user directory that contains a folder called wlp.
glob(join(expanduser('~'), '*', 'wlp'))

これはすべてのプラットフォームで完璧に機能します。

プラットフォームを越えて完璧に動作し、少し違ったことをする別の素晴らしい例です。

from glob    import glob
from os      import getcwd
from os.path import join

# Return everything under the current directory that contains a folder called wlp.
glob(join(getcwd(), '*', 'wlp'))

これらの例が、標準のPythonライブラリモジュールにあるいくつかの関数の力を理解するのに役立つことを願っています。

47
ArtOfWarfare
def list_files(path):
    # returns a list of names (with extension, without full path) of all files 
    # in folder path
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            files.append(name)
    return files 
34
Apogentus

find のPython実装を探しているなら、これは私がかなり頻繁に使うレシピです:

from findtools.find_files import (find_files, Match)

# Recursively find all *.sh files in **/usr/bin**
sh_files_pattern = Match(filetype='f', name='*.sh')
found_files = find_files(path='/usr/bin', match=sh_files_pattern)

for found_file in found_files:
    print found_file

そこで私はそれからPyPI パッケージ を作成し、 GitHubリポジトリ もあります。誰かがこのコードに役立つ可能性があると思うことを願っています。

22

絶対ファイルパスのリストを返し、サブディレクトリに再帰しない

L = [os.path.join(os.getcwd(),f) for f in os.listdir('.') if os.path.isfile(os.path.join(os.getcwd(),f))]
12
The2ndSon

より良い結果を得るためには、osモジュールのlistdir()メソッドをジェネレータと一緒に使うことができます(ジェネレータはその状態を保つ強力なイテレータです、覚えていますか?)次のコードは両方のバージョンで問題なく動作します:Python 2とPython 3。

これがコードです:

import os

def files(path):  
    for file in os.listdir(path):
        if os.path.isfile(os.path.join(path, file)):
            yield file

for file in files("."):  
    print (file)

listdir()メソッドは与えられたディレクトリのエントリのリストを返します。指定されたエントリがファイルの場合、メソッドos.path.isfile()Trueを返します。そしてyield演算子は関数を終了しますが現在の状態を保持し、ファイルとして検出されたエントリの名前のみを返します。上記すべてにより、ジェネレータ関数をループすることができます。

お役に立てれば。

10
ARGeo
import os
import os.path


def get_files(target_dir):
    item_list = os.listdir(target_dir)

    file_list = list()
    for item in item_list:
        item_dir = os.path.join(target_dir,item)
        if os.path.isdir(item_dir):
            file_list += get_files(item_dir)
        else:
            file_list.append(item_dir)
    return file_list

ここでは再帰構造を使います。

9
pah8J

私はあなたのすべてのファイルが*.txtフォーマットで、パスdata/を持つディレクトリの中に格納されていると仮定しています。

次のように、ディレクトリのすべてのファイルを一覧表示し、それらをpythonという名前のリストに追加するには、fnamesglob moduleを使用します。

import glob

fnames = glob.glob("data/*.txt")  #fnames: list data type
9

ある賢い先生が私に一度言った:

何かをするためのいくつかの確立された方法があるとき、それらのどれもすべてのケースに適していません。

このようにして、私はこの問題の サブセット に対する解決策を追加します。たいていの場合、サブディレクトリに入らずに、ファイルが開始文字列と終了文字列に一致するかどうかだけをチェックします。このように、ファイル名のリストを返す関数が欲しいです。

filenames = dir_filter('foo/baz', radical='radical', extension='.txt')

最初に2つの関数を宣言したい場合は、これを実行できます。

def file_filter(filename, radical='', extension=''):
    "Check if a filename matches a radical and extension"
    if not filename:
        return False
    filename = filename.strip()
    return(filename.startswith(radical) and filename.endswith(extension))

def dir_filter(dirname='', radical='', extension=''):
    "Filter filenames in directory according to radical and extension"
    if not dirname:
        dirname = '.'
    return [filename for filename in os.listdir(dirname)
                if file_filter(filename, radical, extension)]

この解決法は正規表現で簡単に一般化することができます(そしてパターンを常にファイル名の最初または最後に固定したくない場合はpattern引数を追加することをお勧めします)。

7
fralau

ジェネレータを使う

import os
def get_files(search_path):
     for (dirpath, _, filenames) in os.walk(search_path):
         for filename in filenames:
             yield os.path.join(dirpath, filename)
list_files = get_files('.')
for filename in list_files:
    print(filename)
5
shantanoo

このコードを使用して、ファイルのフルパス(ディレクトリ+ファイル名)全体にわたって実行されるgetイテレータを使用できます。

import os

def get_iterator_all_files_name(dir_path):
    for (dirpath, dirnames, filenames) in os.walk(dir_path):
        for f in filenames:
            yield os.path.join(dirpath, f)

それをリストに入れるために使ってください。

import os

def get_list_all_files_name(dir_path):
    all_files_path = []

    for (dirpath, dirnames, filenames) in os.walk(dir_path):
        for f in filenames:
            all_files_path.append(os.path.join(dirpath, f))

    return all_files_path
5
yehuda corsia
# -** coding: utf-8 -*-
import os
import traceback

print '\n\n'

def start():
    address = "/home/ubuntu/Desktop"
    try:
        Folders = []
        Id = 1
        for item in os.listdir(address):
            endaddress = address + "/" + item
            Folders.append({'Id': Id, 'TopId': 0, 'Name': item, 'Address': endaddress })
            Id += 1         

            state = 0
            for item2 in os.listdir(endaddress):
                state = 1
            if state == 1: 
                Id = FolderToList(endaddress, Id, Id - 1, Folders)
        return Folders
    except:
        print "___________________________ ERROR ___________________________\n" + traceback.format_exc()

def FolderToList(address, Id, TopId, Folders):
    for item in os.listdir(address):
        endaddress = address + "/" + item
        Folders.append({'Id': Id, 'TopId': TopId, 'Name': item, 'Address': endaddress })
        Id += 1

        state = 0
        for item in os.listdir(endaddress):
            state = 1
        if state == 1: 
            Id = FolderToList(endaddress, Id, Id - 1, Folders)
    return Id

print start()
5
barisim.net

別のファイルタイプを使用したい場合、またはフルディレクトリを取得したい場合は、この機能を使用してください。

import os

def createList(foldername, fulldir = True, suffix=".jpg"):
    file_list_tmp = os.listdir(foldername)
    #print len(file_list_tmp)
    file_list = []
    if fulldir:
        for item in file_list_tmp:
            if item.endswith(suffix):
                file_list.append(os.path.join(foldername, item))
    else:
        for item in file_list_tmp:
            if item.endswith(suffix):
                file_list.append(item)
    return file_list
3
neouyghur

Python 3.4+のためのもう一つの非常に読みやすい変種はpathlib.Path.globを使うことです:

from pathlib import Path
folder = '/foo'
[f for f in Path(folder).glob('*') if f.is_file()]

より具体的にするのは簡単です。シンボリックリンクではないPythonソースファイルだけを探します。これはすべてのサブディレクトリでも同じです。

[f for f in Path(folder).glob('**/*.py') if not f.is_symlink()]
3
fhchl
import dircache
list = dircache.listdir(pathname)
i = 0
check = len(list[0])
temp = []
count = len(list)
while count != 0:
  if len(list[i]) != check:
     temp.append(list[i-1])
     check = len(list[i])
  else:
    i = i + 1
    count = count - 1

print temp
2
shaji

これが私の汎用関数です。ファイル名ではなくファイルパスのリストを返します。それはそれをそれを多目的にする少数のオプション引数を持っています。例えば、私はしばしばpattern='*.txt'subfolders=Trueのような引数と共にそれを使います。

import os
import fnmatch

def list_paths(folder='.', pattern='*', case_sensitive=False, subfolders=False):
    """Return a list of the file paths matching the pattern in the specified 
    folder, optionally including files inside subfolders.
    """
    match = fnmatch.fnmatchcase if case_sensitive else fnmatch.fnmatch
    walked = os.walk(folder) if subfolders else [next(os.walk(folder))]
    return [os.path.join(root, f)
            for root, dirnames, filenames in walked
            for f in filenames if match(f, pattern)]
2
MarredCheese

Python2の場合:pip install rglob

import rglob
file_list=rglob.rglob("/home/base/dir/", "*")
print file_list
1
chris-piekarski

ソースパスとファイルタイプを入力として提供できるサンプルワンライナーを提供します。コードは拡張子csvのファイル名のリストを返します。つかいます すべてのファイルを返す必要がある場合これもサブディレクトリを再帰的にスキャンします。

[y for x in os.walk(sourcePath) for y in glob(os.path.join(x[0], '*.csv'))]

必要に応じてファイル拡張子とソースパスを変更します。

0