2017-07-27 17 views
0

私はそれがこれを置き換えることができるのかどうかを知るしたい場合:ヘルプリスト内包内のリスト要素の条件は

+1

os.path.splitext(x)のext、nameの名前に '' abc "とは何ですか?あなたはここで何を達成しようとしていますか? –

+0

あなたは、 os.path.splitext(x)[1]]の中で、ext == ".tif"と "abc"の場合、[x for os.listdir(dir_path) –

+0

@ juanpa.arrivillagaはい、ありがとう、私は別の方法の周りを意味しました。そして、 "abc"はちょうど任意の名前です。私はファイル名に "abc"を持つと同時に拡張子 ".tif"を持つすべてのファイルを一覧表示しようとしています – MMagician

答えて

1

を使用します:あなたは、関数の中で、あなたの条件を包むことができ

ここ
results = [x for x, name, ext in ((x, *os.path.splitext(x)) for x in os.listdir(dir_path)) 
      if ext == ".tif" and "abc" in name] 

*os.path.splitext(x)はアンパック外部リストの理解の中の変数nameextへの呼び出しの結果(Python 3のみ)。古いバージョンの場合は、代わりに(x,) + os.path.splitext(x)を使用できます。また、splitextは、ではなく、(name, ext)のタプルを返します。

また、splitextを使用する代わりに、名前部分で検索する部分をファイル名の拡張部分に含めることはできないと仮定して、ファイル名を直接確認してください。

results = [x for x in os.listdir(dir_path) if x.endswith(".tif") and "abc" in x] 
3

あなたのラインの

results = [x for x in os.listdir(dir_path) if ext == ".tif" and "abc" in name for ext, name in os.path.splitext(x)] 

ありがとう:のようなもので

results = [x for x in os.listdir(dir_path) if os.path.splitext(x)[1] == ".tif" and "abc" in os.path.splitext(x)[0]] 

かなり長いので、複数の行に分割したいかもしれません。

def filter_file(path): 
    ext, name = os.path.splitext(path) 
    if not ext == '.tif': 
     return False 
    return 'abc' in name 

そして、あなたは内側のジェネレータ式を使用してnameextを定義することができ

results = [x for x in os.listdir(dir_path) if filter_file(x)] 
+0

確かに、これも動作する可能性があります。 – MMagician

1

私は、これはあなたが望むものであることを推測しています:

results = [name + ext for name, ext in [os.path.splitext(x) for x in os.listdir(dir_path)] if ext == ".tif" and "abc" in name ] 

注:私はextnameを配置しています。

内部リストは、名前とext値であるタプルのリストを生成しています。