2

ファイル名を表す文字列がありますが、一度にいくつかの条件に対してチェックするにはどうすればよいですか? 私はもう試した

if r'.jpg' or r'.png' not in singlefile:

しかし、常に誤検知が発生し続けました。

4

4 に答える 4

3

あなたのコードは次と同じです:

if (r'.jpg') or (r'.png' not in singlefile):

あなたは、おそらく、探している:

if r'.jpg' not in singlefile or r'.png' not in singlefile:

または

if any(part not in singlefile for part in [r'.jpg', r'.png']):

Tim Pietzcker に感謝します。

彼(あなた)は実際に(おそらく)欲しがっている

if not any(singlefile.endswith(part) for part in [r'.jpg', r'.png'])
#                     ^^^^^^^^
于 2013-06-16T13:44:42.037 に答える
2

これは優先順位のためです。次のコードは意味します。

# r'.jpg' is constant
if r'.jpg' or (r'.png' not in singlefile):

一定の場合、また.pngはない場合singlefile。定数は常に true であるため、式は常に true です。

代わりに、正規表現を使用して、パターンに適合する文字列を確認できます。

import re
if re.match(r"\.(?:jpg|png)$", singlefile):
于 2013-06-16T13:45:50.573 に答える
1

問題は、論理 OR が定数と変数をチェックしているという事実にあります。

r'.png'

は常に True と評価されるため、あなたorも true になります。

そのように、両方をチェックする必要があります

if r'.png' not in singlefile or 'r.jpg'  not in singlefile:
    #do stuff
于 2013-06-16T13:51:28.863 に答える
0

これを試して:

if r'.jpg' not in singlefile or r'.png' not in singlefile:
于 2013-06-16T13:51:00.643 に答える