JavaではFile.listFiles()
、ディレクトリ内のすべてのファイルを実行および受信できます。その後、ディレクトリツリーを簡単に繰り返すことができます。
Pythonでこれを行う類似の方法はありますか?
JavaではFile.listFiles()
、ディレクトリ内のすべてのファイルを実行および受信できます。その後、ディレクトリツリーを簡単に繰り返すことができます。
Pythonでこれを行う類似の方法はありますか?
はいあります。Python の方法はさらに優れています。
次の 3 つの可能性があります。
1) File.listFiles() のように:
Python には関数 os.listdir(path) があります。これは、Java メソッドのように機能します。
2) グロブによるパス名パターン展開:
モジュール glob には、Unix シェルのようなパターンを使用してファイル システム上のファイルを一覧表示する関数が含まれています。
files = glob.glob('/usr/joe/*.gif')
3) walk を使用したファイル トラバーサル:
本当に素晴らしいのは、Python の os.walk 関数です。
walk メソッドは、指定された開始パスの下にあるすべてのディレクトリとファイルを再帰的にリストする生成関数を返します。
例:
import os
from os.path import join
for root, dirs, files in os.walk('/usr'):
print "Current directory", root
print "Sub directories", dirs
print "Files", files
その場で "dirs" からディレクトリを削除して、そのディレクトリに移動しないようにすることもできます。
長年の Pythonista として、std ライブラリのパス/ファイル操作関数は標準以下であると言わざるを得ません。それらはオブジェクト指向ではなく、時代遅れの lets-wrap-OS-system-functions-without- を反映しています。思考哲学。「path」モジュールをラッパーとして心からお勧めします(知っておく必要がある場合は、os、os.path、glob、およびtempfile周辺):はるかに優れたOOPy:http://pypi.python.org/pypi/path.py /2.2
これは path モジュールを使用した walk() です。
dir = path(os.environ['HOME'])
for f in dir.walk():
if f.isfile() and f.endswith('~'):
f.remove()
os モジュール ( docs )で "listdir()" を試してください:
import os
print os.listdir('.')
サブディレクトリも必要な場合は、os.path.walk を使用します。
walk(トップ、関数、引数) コールバック関数によるディレクトリ ツリー ウォーク。 最上位をルートとするディレクトリ ツリー内の各ディレクトリ (最上位を含む) それ自体、ただし「.」を除く および '..')、func(arg, dirname, fnames) を呼び出します。 dirname はディレクトリの名前で、fnames はディレクトリの名前のリストです。 dirname 内のファイルとサブディレクトリ (「.」と「..」を除く)。機能 fnames リストをその場で変更することができます (たとえば、del またはスライスの割り当てを介して)。 そして walk は、名前が残っているサブディレクトリにのみ再帰します fname; これを使用して、フィルターを実装したり、特定の条件を適用したりできます。 訪問する順番。arg のセマンティクスは定義されていません。 その arg を超えると、常に func に渡されます。パスなどに使用できます。 ファイル名パターン、または蓄積するように設計された可変オブジェクト 統計学。arg に None を渡すのが一般的です。
ここos.walk()
で例を見てみましょう。ディレクトリツリー全体を簡単に処理できます。os.walk()
上記のリンクの例...
# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION: This is dangerous! For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
os.rmdir(os.path.join(root, name))
os.path.walk
Python 3.0 で削除されるため、 お勧めしません。os.walk
とにかく、より単純です、または少なくとも私はそれがより単純だと思います。
Straight from Python's Refererence Library
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
私は長い間Pythonでプログラミングしてきたので、osモジュールを何度も使用し、ディレクトリ内のすべてのファイルを印刷する独自の関数を作成しました。
関数のコード:
import os
def PrintFiles(direc):
files = os.listdir(direc)
for x in range(len(files)):
print("File no. "+str(x+1)+": "+files[x])
PrintFiles(direc)