2017-04-05 13 views
-1

次のように私は、ディレクトリツリー構造を持っている:WindowsのPython 2.7で特定の深さのフォルダにある特定の名前のファイルにアクセスするにはどうすればいいですか?

C:\Users\Win-8.1\Desktop\gangotri\images\smb 

2つのフォルダが含まれている:

まず
C:\Users\Win-8.1\Desktop\gangotri\images\smb\1998\05_06_1998\LT51460391998156XXX02.tar\LT51460391998156XXX02\ReflectanceB3.tif 

、私は(= 6)以下の深さに来てほしいです。

は第二に、私は(= 7)「再帰的」以下の深さに来てほしい:

特定の年のデータを含むフォルダを持っている
C:\Users\Win-8.1\Desktop\gangotri\images\smb\1998 

は第三に、私は以下の深さ(= 11)に来てほしい:

C:\Users\Win-8.1\Desktop\gangotri\images\smb\1998\05_06_1998\LT51460391998156XXX02.tar\LT51460391998156XXX02\ReflectanceB3.tif 

ファイルをたくさん持っています。しかし、私は正確に2つの名前をそれぞれ特定の名前(= ReflectanceB3.tif、= ReflectanceB4.tif)で探し、それらのそれぞれに定数を掛けたいと思います。

最後に、もう一度深度(= 6)に戻り、もう一方のフォルダを入力して、2番目と3番目のプロセスをもう一度開始します。

答えて

1

Pythonのglobモジュールを使用できます。これは、名前が示唆するように、globsで動作します。

「depth = 7」の部分についてはわかりませんが、以下の答えの残りを見つけてください。

C:\ Users \ Win-8.1 \ Desktop \ gangotri \ images \ smb内の深さ11のファイルにアクセスするには、glob式は 'C:\\Users\\Win-8.1\\Desktop\\gangotri\\images\\smb\\*\\*\\*\\*\\*'になります。 別のバックスラッシュを追加して、バックスラッシュ(Windowsディレクトリセパレータ)をエスケープする必要があることに注意してください。あなたが唯一のアクセスReflectanceB3.tifとReflectanceB4.tifにしたい場合は、例えば、あなたがSMB後(マッチング年に微弱な試みを)のみ4桁の数字のディレクトリを一致させたい場合は

は、あなたの表現は、'C:\\Users\\Win-8.1\\Desktop\\gangotri\\images\\smb\\*\\*\\*\\*\\ReflectanceB[34].tif'

になりますあなたは使用することができます'C:\\Users\\Win-8.1\\Desktop\\gangotri\\images\\smb\\[0-9][0-9][0-9][0-9]\\*\\*\\*\\ReflectanceB[34].tif'

グローブ式はあなたのものと同様のニーズを解決することができます。しかし、それは、年であるディレクトリだけを選ぶことによって見られるように、制限があります。このためには、非常に強力な​​モジュールを使用する必要があります。 Pythonではディレクトリトラバーサルと正規表現のパターンマッチングを組み合わせた 'out of the box'モジュールは存在しません。トラバーサルを自分で実行する必要があります。

関連する問題