ホームページ  >  記事  >  バックエンド開発  >  Pythonでファイルをトラバースする3つの方法

Pythonでファイルをトラバースする3つの方法

WBOY
WBOYオリジナル
2016-06-16 08:42:171177ブラウズ

今日は、ファイル トラバーサルを使用して、Windows でファイル名をバッチ変更する Python スクリプトを作成しました。 Python を使用したファイル トラバーサルには多くの方法があり、ここではそれらをリストして説明します。

os.path.walk()

これは伝統的な使用法です。

walk(root,callable,args) メソッドには 3 つのパラメータがあります: トラバースするディレクトリ、コールバック関数、およびコールバック関数のパラメータ (タプル形式)。

呼び出しプロセスは、ディレクトリ内のファイルまたはディレクトリを走査し、ディレクトリを走査するたびにコールバック関数が呼び出され、引数がパラメータとしてコールバック関数に渡されます。

コールバック関数には定義時に 3 つのパラメータもあります。たとえば、この例の func の 3 つのパラメータは、walk で渡されるパラメータ、ディレクトリへのパス、ディレクトリ内のファイル リスト (ファイルのみ) です。フルパスではなく名前)。例を参照:

コードをコピー コードは次のとおりです:

OS をインポート
s = os.sep #unix または win によると、s は or/
root = "d:" + s + "ll" + s #走査するディレクトリ

def func(args,dire,fis): #コールバック関数の定義
fis の f の場合:
fname = os.path.splitext(f) #ファイル名を名前と拡張子のタプルに分割します
new = fname[0] + 'b' + fname[1] #名前を変更
os.rename(os.path.join(dire,f),os.path.join(dire,new)) #Rename

os.path.walk(root,func,()) #Traverse

このメソッドを使用すると、次のレベルを再帰的に移動できないという問題があります (これについてはまだよくわかりません。修正してください)。

Python の上級バージョンには os.walk() が追加されており、これよりも使いやすくなっています。

os.walk()

プロトタイプは次のとおりです: os.walk(top, topdown=True, onerror=None, followlinks=False)

通常は最初のパラメータのみを使用します。 (トップダウンは走査の順序を指定します)
このメソッドは、ディレクトリごとに 3 つの要素 (ディレクトリパス、ディレクトリ名、ファイル名) を返します。 1 つ目はパス、2 つ目はパスの下のディレクトリ、3 つ目はパスの下のディレクトリ以外 (Windows の場合はファイル) です。例を参照:

コードをコピー コードは次のとおりです:

OS をインポート
s = os.sep
root = "d:" + s + "ll" + s

os.walk(root) 内の rt、dirs、ファイルの場合:
ファイル内の f の場合:
fname = os.path.splitext(f)
新しい = fname[0] + 'b' + fname[1]
os.rename(os.path.join(rt,f),os.path.join(rt,new))

このメソッドはすべてのファイルを再帰的に走査できます。

リストディレクトリ

os モジュールでいくつかのメソッドを使用して、組み合わせたり走査したりできます。例を参照:

コードをコピー コードは次のとおりです:

OS をインポート
s = os.sep
root = "d:" + s + "ll" + s

os.listdir(root) の i:
os.path.isfile(os.path.join(root,i))の場合:
プリント i

ここで、i は完全なパスではなくディレクトリまたはファイル名であることに注意してください。これを使用する場合は、os.path.join() メソッドと組み合わせて完全なパスを復元する必要があります。

走査が完了したら、高度な処理のために正規表現を使用してファイル名を変更できます。

さらに、os.system (cmd) を使用して、シェル内で関連するコマンドを呼び出してファイルを処理することもできます。これは非常に優れており強力です。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。