2011-10-29 9 views
1

私はPythonには新しく、基本的なバックアッププログラムを作成しようとしています。これは、特定の拡張子(この場合は.doc)のファイルをコンピュータのホームドライブ全体で検索することを可能にします(プログラムはUSBから実行されるため)所定のディレクトリにコピーします。私は基本的なI/Oコマンドのいくつかを扱っていますが、これにはかなりの困難があります。
時間のある人なら、誰でもこれを手伝うことができますか?
拡張子を持つファイルを検索し、Pythonでディレクトリにコピーしますか?

お返事ありがとうございます。
Liam

答えて

2

ファイルシステムを調べるには、os.walkを試してみてください。それは再帰的に各ディレクトリ内のファイルとディレクトリのリストを生成するディレクトリに従います。例えば

、このようなディレクトリ構造を与えられた:

. 
├── baz 
│   └── bif 
│    ├── bang 
│    └── file1.doc 
└── foo 
    ├── bar 
    │   └── file3.doc 
    └── file2.doc 

このコード:

[('.', ['baz', 'foo'], []), 
('./baz', ['bif'], []), 
('./baz/bif', ['bang'], ['file1.doc']), 
('./baz/bif/bang', [], []), 
('./foo', ['bar'], ['file2.doc']), 
('./foo/bar', [], ['file3.doc'])] 

あなたは可能性があり、その後をループ:

import os 

print list(os.walk('.')) # walk current (.) directory 

はこのような何かを作るだろう結果を表示し、コピーするファイルのリストをコンパイルします。

ファイルをコピーする場合、shutilパッケージには、copyがあり、src/destファイルのパスをとるだけです。 http://docs.python.org/library/shutil.html

編集

役に立ちましたファイルを検索物事は、次のとおりです:

  • globパッケージ:名前が示すように、グロブスタイルファイルのマッチング(* .TXTを詳細については、ドキュメントを参照してください、など)。私はこれが再帰的な検索をサポートしているとは思わない。この例では、glob('foo/*.doc')を実行すると、['foo/file2.doc']という結果が得られます。
  • fnmatchfnmatchパッケージからは、文字列に対してglobスタイルのパターンマッチングを実行できます。例fnmatch('foo.txt', '*.txt')戻ります。True
+0

フィードバックありがとうございます。上記のos.walkメソッドを使用して、コピーするファイルのリストを作成した後、shutil.copyfileを使用してリスト内のすべてのファイルをコピーしていた可能性があります。しかし、これは2つの問題を引き起こします - 1)これは私の頭上にかなりの方法です2)最も洗練された解決策のようには見えません。もし私がもっと難しく思うなら、おそらくこれを扱う簡単な方法があります。 もう一度、ご協力いただきありがとうございます。 –

+0

@LiamJohnson:この質問に対する受け入れられた答え:osを使用する方法の良い例を与えるのは、http://stackoverflow.com/questions/2186525/use-a-glob-to-find-files-recursively-in-pythonです。あなたがやろうとしているようなファイルを探すためにfnmatchを使って歩いてください。 –

関連する問題