Pythonでファイルをリストアップする

Pythonで特定のディレクト以下にあるファイルをリストアップします。

目次

  1. os.walkメソッドの使い方
  2. walkメソッドの実施例

os.walkメソッドの使い方

import os

(dirpath, dirnames, filenames) = os.walk(top, [topdown], [onerror], [followlinks])
変数 内容
top str リストアップするディレクトリのパス。
topdown bool 省略可。規定値はTrue。
onerror   省略可。規定値はNone。
followlinks bool 省略可。規定値はFalse。シンボリックリンクをたどるかどうか。
dirpath str リストアップしたディレクトリのパス。
dirnames list リストアップしたディレクトリに存在するディレクトリのリスト。
filenames list リストアップしたディレクトリに存在するファイルのリスト。

walkメソッドの実施例

ちょっと使い方がわかりにくいので、使用例です。

あるディレクトリに対してwalkメソッドの結果を表示します。

import os

for dirpath, dirname, filename in os.walk('c:\\program files\\python37\\tools'):
    print(dirpath)
    print(dirname)
    print(filename)

このコードの実行結果は、このようになります。

c:\program files\python37\tools
['demo', 'i18n', 'parser', 'pynche', 'scripts']
[]
c:\program files\python37\tools\demo
['__pycache__']
['beer.py', 'eiffel.py', 'hanoi.py', 'life.py', 'markov.py', 'mcast.py', 'queens.py', 'redemo.py', 'rpython.py', 'rpythond.py', 'sortvisu.py', 'ss1.py', 'vector.py']
c:\program files\python37\tools\demo\__pycache__
[]
[]
c:\program files\python37\tools\i18n
['__pycache__']
['makelocalealias.py', 'msgfmt.py', 'pygettext.py']
c:\program files\python37\tools\i18n\__pycache__
[]
[]
c:\program files\python37\tools\parser
['__pycache__']
['unparse.py']
c:\program files\python37\tools\parser\__pycache__
[]
[]
c:\program files\python37\tools\pynche
['X', '__pycache__']
['ChipViewer.py', 'ColorDB.py', 'DetailsViewer.py', 'html40colors.txt', 'ListViewer.py', 'Main.py', 'namedcolors.txt', 'pyColorChooser.py', 'pynche.pyw', 'PyncheWidget.py', 'StripViewer.py', 'Switchboard.py', 'TextViewer.py', 'TypeinViewer.py', 'webcolors.txt', 'websafe.txt', '__init__.py']
c:\program files\python37\tools\pynche\X
[]
['rgb.txt', 'xlicense.txt']
c:\program files\python37\tools\pynche\__pycache__
[]
[]
c:\program files\python37\tools\scripts
['__pycache__']
['2to3.py', 'abitype.py', 'analyze_dxp.py', 'byext.py', 'byteyears.py', 'checkpip.py', 'checkpyc.py', 'cleanfuture.py', 'combinerefs.py', 'copytime.py', 'crlf.py', 'db2pickle.py', 'diff.py', 'dutree.py', 'eptags.py', 'find-uname.py', 'finddiv.py', 'findlinksto.py', 'findnocoding.py', 'find_recursionlimit.py', 'fixcid.py', 'fixdiv.py', 'fixheader.py', 'fixnotice.py', 'fixps.py', 'generate_opcode_h.py', 'get-remote-certificate.py', 'google.py', 'gprof2html.py', 'h2py.py', 'highlight.py', 'ifdef.py', 'import_diagnostics.py', 'lfcr.py', 'linktree.py', 'lll.py', 'mailerdaemon.py', 'make_ctype.py', 'md5sum.py', 'mkreal.py', 'ndiff.py', 'nm2def.py', 'objgraph.py', 'parseentities.py', 'parse_html5_entities.py', 'patchcheck.py', 'pathfix.py', 'pdeps.py', 'pickle2db.py', 'pindent.py', 'ptags.py', 'pydoc3.py', 'pysource.py', 'pyvenv.py', 'reindent-rst.py', 'reindent.py', 'rgrep.py', 'run_tests.py', 'serve.py', 'smelly.py', 'suff.py', 'texi2html.py', 'untabify.py', 'update_file.py', 'which.py', 'win_add2path.py']
c:\program files\python37\tools\scripts\__pycache__
[]
[]

最初にディレクトリパスが表示され、その次にそのディレクトリのサブディレクトリのリストが表示され、そしてそのディレクトリのファイルのリストが表示されます。 これが、すべてのサブディレクトリに対して実行されます。

これを使うと、すべてのファイルがリストアップできます。

例えば、次のコードは特定のディレクトリ以下にあるファイルを列挙します。

import os
import os.path

for dirpath, dirname, filename in os.walk('c:\\program files\\python37\\tools'):
    for f in filename:
        print(os.path.join(dirpath, f))

これを実行すると、こういう結果が得られます。

c:\program files\python37\tools\demo\beer.py
c:\program files\python37\tools\demo\eiffel.py
c:\program files\python37\tools\demo\hanoi.py
c:\program files\python37\tools\demo\life.py
c:\program files\python37\tools\demo\markov.py
c:\program files\python37\tools\demo\mcast.py
c:\program files\python37\tools\demo\queens.py
c:\program files\python37\tools\demo\redemo.py
c:\program files\python37\tools\demo\rpython.py
c:\program files\python37\tools\demo\rpythond.py
c:\program files\python37\tools\demo\sortvisu.py
c:\program files\python37\tools\demo\ss1.py
c:\program files\python37\tools\demo\vector.py
c:\program files\python37\tools\i18n\makelocalealias.py
c:\program files\python37\tools\i18n\msgfmt.py
c:\program files\python37\tools\i18n\pygettext.py
c:\program files\python37\tools\parser\unparse.py
c:\program files\python37\tools\pynche\ChipViewer.py
c:\program files\python37\tools\pynche\ColorDB.py
c:\program files\python37\tools\pynche\DetailsViewer.py
c:\program files\python37\tools\pynche\html40colors.txt
c:\program files\python37\tools\pynche\ListViewer.py
c:\program files\python37\tools\pynche\Main.py
c:\program files\python37\tools\pynche\namedcolors.txt
c:\program files\python37\tools\pynche\pyColorChooser.py
c:\program files\python37\tools\pynche\pynche.pyw
c:\program files\python37\tools\pynche\PyncheWidget.py
c:\program files\python37\tools\pynche\StripViewer.py
c:\program files\python37\tools\pynche\Switchboard.py
c:\program files\python37\tools\pynche\TextViewer.py
c:\program files\python37\tools\pynche\TypeinViewer.py
c:\program files\python37\tools\pynche\webcolors.txt
c:\program files\python37\tools\pynche\websafe.txt
c:\program files\python37\tools\pynche\__init__.py
c:\program files\python37\tools\pynche\X\rgb.txt
c:\program files\python37\tools\pynche\X\xlicense.txt
c:\program files\python37\tools\scripts\2to3.py
c:\program files\python37\tools\scripts\abitype.py
c:\program files\python37\tools\scripts\analyze_dxp.py
c:\program files\python37\tools\scripts\byext.py
c:\program files\python37\tools\scripts\byteyears.py
c:\program files\python37\tools\scripts\checkpip.py
c:\program files\python37\tools\scripts\checkpyc.py
c:\program files\python37\tools\scripts\cleanfuture.py
c:\program files\python37\tools\scripts\combinerefs.py
c:\program files\python37\tools\scripts\copytime.py
c:\program files\python37\tools\scripts\crlf.py
c:\program files\python37\tools\scripts\db2pickle.py
c:\program files\python37\tools\scripts\diff.py
c:\program files\python37\tools\scripts\dutree.py
c:\program files\python37\tools\scripts\eptags.py
c:\program files\python37\tools\scripts\find-uname.py
c:\program files\python37\tools\scripts\finddiv.py
c:\program files\python37\tools\scripts\findlinksto.py
c:\program files\python37\tools\scripts\findnocoding.py
c:\program files\python37\tools\scripts\find_recursionlimit.py
c:\program files\python37\tools\scripts\fixcid.py
c:\program files\python37\tools\scripts\fixdiv.py
c:\program files\python37\tools\scripts\fixheader.py
c:\program files\python37\tools\scripts\fixnotice.py
c:\program files\python37\tools\scripts\fixps.py
c:\program files\python37\tools\scripts\generate_opcode_h.py
c:\program files\python37\tools\scripts\get-remote-certificate.py
c:\program files\python37\tools\scripts\google.py
c:\program files\python37\tools\scripts\gprof2html.py
c:\program files\python37\tools\scripts\h2py.py
c:\program files\python37\tools\scripts\highlight.py
c:\program files\python37\tools\scripts\ifdef.py
c:\program files\python37\tools\scripts\import_diagnostics.py
c:\program files\python37\tools\scripts\lfcr.py
c:\program files\python37\tools\scripts\linktree.py
c:\program files\python37\tools\scripts\lll.py
c:\program files\python37\tools\scripts\mailerdaemon.py
c:\program files\python37\tools\scripts\make_ctype.py
c:\program files\python37\tools\scripts\md5sum.py
c:\program files\python37\tools\scripts\mkreal.py
c:\program files\python37\tools\scripts\ndiff.py
c:\program files\python37\tools\scripts\nm2def.py
c:\program files\python37\tools\scripts\objgraph.py
c:\program files\python37\tools\scripts\parseentities.py
c:\program files\python37\tools\scripts\parse_html5_entities.py
c:\program files\python37\tools\scripts\patchcheck.py
c:\program files\python37\tools\scripts\pathfix.py
c:\program files\python37\tools\scripts\pdeps.py
c:\program files\python37\tools\scripts\pickle2db.py
c:\program files\python37\tools\scripts\pindent.py
c:\program files\python37\tools\scripts\ptags.py
c:\program files\python37\tools\scripts\pydoc3.py
c:\program files\python37\tools\scripts\pysource.py
c:\program files\python37\tools\scripts\pyvenv.py
c:\program files\python37\tools\scripts\reindent-rst.py
c:\program files\python37\tools\scripts\reindent.py
c:\program files\python37\tools\scripts\rgrep.py
c:\program files\python37\tools\scripts\run_tests.py
c:\program files\python37\tools\scripts\serve.py
c:\program files\python37\tools\scripts\smelly.py
c:\program files\python37\tools\scripts\suff.py
c:\program files\python37\tools\scripts\texi2html.py
c:\program files\python37\tools\scripts\untabify.py
c:\program files\python37\tools\scripts\update_file.py
c:\program files\python37\tools\scripts\which.py
c:\program files\python37\tools\scripts\win_add2path.py

いろいろ応用できそうですね。

広告

Pythonのファイル処理カテゴリの投稿