0

たとえば、次のようなファイルのリストがあるとします。

files = ["C:\\MyDir\\some_file.txt",
         "C:\\MyDir\\another_file.txt",
         "C:\\MyDir\\some_file.old"]

そして、「some」で始まる「.txt」ファイルを取り出したいと思います。標準のfnmatch.filterメソッドを使用します。

my_files = fnmatch.filter([os.path.basename(i) for i in files], "some*.txt")

["some_file.txt"]を返します。ここで、これらのファイルが実際にSFTPサイトにあり、フィルタリング後にSFTPサイトからダウンロードしたいとします。ダウンロードしたいファイルの完全なファイルパスを取得するにはどうすればよいですか?

os.path.abspath("some_file.txt") 

明らかな理由で機能しません。フィルタパターンの前に別のワイルドカード( "*")を付けることもできますが、これは回避策です。これを行うためのクリーンな方法はありますか?

4

1 に答える 1

0

フルパス名が必要な場合は、フルパス名にフィルターを適用する必要があります。パターンはfnmatch少し制限されており、とにかく正規表現に変換されるので、re直接使用しないのはなぜですか?

import re
files = ["C:\\MyDir\\some_file.txt",
     "C:\\MyDir\\another_file.txt",
     "C:\\MyDir\\some_file.old"]

patern = re.compile(r"\\some[^\\]*\.txt$", re.I)
filtered_files = [f for f in files if pattern.search(f)]
于 2012-05-23T20:48:41.910 に答える