10

JavaではFile.listFiles()、ディレクトリ内のすべてのファイルを実行および受信できます。その後、ディレクトリツリーを簡単に繰り返すことができます。

Pythonでこれを行う類似の方法はありますか?

4

9 に答える 9

25

はいあります。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" からディレクトリを削除して、そのディレクトリに移動しないようにすることもできます。

listdir と walk はここに文書化されています。グロブはここに文書化されています。

于 2008-09-26T17:30:39.347 に答える
5

長年の 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()
于 2008-09-27T08:27:39.207 に答える
3

os モジュール ( docs )で "listdir()" を試してください:

import os
print os.listdir('.')
于 2008-09-26T17:26:17.377 に答える
2

サブディレクトリも必要な場合は、os.path.walk を使用します。

walk(トップ、関数、引数)

        コールバック関数によるディレクトリ ツリー ウォーク。

        最上位をルートとするディレクトリ ツリー内の各ディレクトリ (最上位を含む)
        それ自体、ただし「.」を除く および '..')、func(arg, dirname, fnames) を呼び出します。
        dirname はディレクトリの名前で、fnames はディレクトリの名前のリストです。
        dirname 内のファイルとサブディレクトリ (「.」と「..」を除く)。機能
        fnames リストをその場で変更することができます (たとえば、del またはスライスの割り当てを介して)。
        そして walk は、名前が残っているサブディレクトリにのみ再帰します
        fname; これを使用して、フィルターを実装したり、特定の条件を適用したりできます。
        訪問する順番。arg のセマンティクスは定義されていません。
        その arg を超えると、常に func に渡されます。パスなどに使用できます。
        ファイル名パターン、または蓄積するように設計された可変オブジェクト
        統計学。arg に None を渡すのが一般的です。
于 2008-09-26T17:31:07.927 に答える
2

ここ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))
于 2008-09-26T17:27:59.103 に答える
2

os.path.walkPython 3.0 で削除されるため、 お勧めしません。os.walkとにかく、より単純です、または少なくともはそれがより単純だと思います。

于 2008-09-26T18:58:52.973 に答える
2

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']
于 2008-09-26T17:24:10.750 に答える
0

私は長い間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)
于 2016-02-29T17:26:59.153 に答える