-6

次のディレクトリ構造があるとします。

C:\Test
C:\Test\2009
C:\Test\2009\files\Artists
C:\Test\2009\files\Artists\SnoopDog
C:\Test\2009\files\Artists\SnoopDog\albums.txt
C:\Test\2009\files\Artists\SnoopDog\albums.jpg
C:\Test\2009\files\Artists\SnoopDog\hobbies.doc
C:\Test\2009\files\Artists\SmashMouth\albums.txt
C:\Test\2009\files\Artists\SmashMouth\hobbies.doc
C:\Test\2010\files\Artists\SnoopDog\albums.txt
C:\Test\2010\files\Artists\SnoopDog\albums.jpg
C:\Test\2010\files\Artists\SnoopDog\hobbies.doc

以下は、目標として必要なディレクトリ構造です。

C:\ToDirectory\
C:\ToDirectory\2009\albums\SnoopDog_albums.txt
C:\ToDirectory\2009\albums\SnoopDog_albums.jpg
C:\ToDirectory\2009\albums\SmashMouth_albums.txt
C:\ToDirectory\2009\albums\SmashMouth_albums.jpg
C:\ToDirectory\2009\hobbies\SmashMouth_hobbies.doc
C:\ToDirectory\2009\hobbies\SnoopDog_hobbies.doc
C:\ToDirectory\2010\albums\SnoopDog_albums.txt
C:\ToDirectory\2010\albums\SnoopDog_albums.jpg

C:\Testすべてのファイルが含まれていると仮定C:\ToDirectoryし、空のディレクトリとして開始します。

C:\TestソースディレクトリとターゲットディレクトリToDirectoryを指定するだけで、スクリプトが の最下位レベルにC:\Test移動し、ディレクトリ内の各ファイルを調べて、ファイル名 (拡張子を無視) が durectiry であるかどうかをチェックする関数を持つ最も効率的な方法は何ですか?そうでない場合は、ToDirectory構造内でそれを作成し、その名前の先頭に親ディレクトリを python で追加してファイルをコピーしますか?

次の一連のループで os.listdir と os.isdir を使用していますが、非常に長く見え、機能しますが、非効率的です...

4

2 に答える 2

0

pythons高レベル ファイル操作ライブラリを試してください ( import shutil )

また、pythons の優れたディレクトリ ウォーキング機能の使用を検討してください ( os import walk から)

ファイルをコピーする必要はありませんが、ディレクトリとファイル名の名前を変更するだけです。

于 2012-09-04T23:55:03.113 に答える
0

ループを明示的にネストする代わりに、再帰を使用して短いコードを実現できます。

再帰は常により効率的であるとは限りませんが、コードの見栄えはずっと良くなります!.

于 2012-09-04T21:49:56.120 に答える