Да, re.findall
возвращает объект (как и все в Python). Однако этот объект представляет собой список совпадений, который никогда не будет равен целому числу 1
.
Поскольку пустые списки вычисляться False
в Python, вы можете решить эту проблему, просто напишите:
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']
>>>
Или, еще лучше в этом случае, чтобы избавиться от Regex вообще и использовать 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