是的,re.findall
返回一個對象(就像Python中的所有東西一樣)。但是,該對象是一個匹配列表,它永遠不會等於整數1
。
由於空列表在Python評估爲False
,您可以修復只需做題:
if re.findall(r'\.gz$', item):
下面是一個演示:
>>> import re
>>> server_list1=('part002.csv.gz' , '2014-01-28', 'part001.csv.gz', '2014-01-28', 'part002.csv.gz', '2014-01-25')
>>> x=[]
>>> for item in server_list1:
... if re.findall(r'\.gz$', item):
... x.append(item)
...
>>> x
['part002.csv.gz', 'part001.csv.gz', 'part002.csv.gz']
>>>
而且,你會發現,我將您的Regex模式更改爲\.gz$
,而不僅僅是gz
。新字符串將匹配字符串末尾的.gz
,而不是字符串中任何位置的gz
。
然而,正如@krait下文提到的,你不應該使用re.findall
測試如果一個字符串包含一個模式。相反,你應該使用re.search
:
>>> import re
>>> server_list1=('part002.csv.gz' , '2014-01-28', 'part001.csv.gz', '2014-01-28', 'part002.csv.gz', '2014-01-25')
>>> x=[]
>>> for item in server_list1:
... if re.search(r'\.gz$', item):
... x.append(item)
...
>>> x
['part002.csv.gz', 'part001.csv.gz', 'part002.csv.gz']
>>>
或者說,在這種情況下甚至更好,擺脫正則表達式的完全和使用str.endswith
:
>>> server_list1=('part002.csv.gz' , '2014-01-28', 'part001.csv.gz', '2014-01-28', 'part002.csv.gz', '2014-01-25')
>>> x=[]
>>> for item in server_list1:
... if item.endswith('.gz'):
... x.append(item)
...
>>> x
['part002.csv.gz', 'part001.csv.gz', 'part002.csv.gz']
>>>
findall返回匹配字符串列表。請參閱文檔。 – krait