Печать URL, если у него есть определенное ключевое слово - PullRequest
0 голосов
/ 18 июня 2019

У меня есть функция, которая извлекает URL из espn.URL выглядит следующим образом http://www.espncricinfo.com/series/13224/scorecard/426406/scotland-vs-england-only-odi-england-in-scotland-odi-match-2010, http://www.espncricinfo.com/series/13240/scorecard/426384/ireland-vs-australia-only-odi-australia-tour-of-england-and-ireland-2010

Я создал список стран, и я хотел напечатать сообщение, если URL содержит страну из списка, иначе перейдите к извлечению следующего URL

all_countries=['England','India','West Indies']

#one_day will have all the links
for day in one_day:
        d=day.split('-')
        if d in all_countries:
            print(day)
        else:
            next

Не работает.Любая помощь приветствуется

Ответы [ 4 ]

1 голос
/ 18 июня 2019

Вот простой способ сделать это (предполагая, что one_day - это список URL-адресов, а all_countries - это список названий стран):

# (some example values for urls and country names) 
one_day = ['http://www.espncricinfo.com/...-vs-australia-only-odi-au...', 
           'http://www.espncricinfo.com/...scotland-vs-england-only-...'] 
all_countries = ['India', 'Ireland', 'Australia'] 

for day in one_day:
  for country in all_countries:
    if country.lower() in day:
      print(f'found a match for {country}: `{day}`')
      # or just: print(day) 

Это работает, потому что in проверяет наличиеподстрока, например:

'Australia'.lower() in '...-vs-australia-only-odi-au...'
## True 

Это то, что вы проверяете на каждой итерации внутреннего цикла в условии country.lower() in day.

ps вы также можете разделить на '-', как в оригинальном сообщении, на случай, если вас беспокоит такие случаи, как, например, 'USA' совпадение с URL-адресом, содержащим '-musac...' или что-то подобное.Чтобы сделать это, вы могли бы сказать что-то вроде этого:

for day in one_day:
  day_split = day.split('-')
  for elem in day_split:
    if elem in [c.lower() for c in all_countries]:
      print(f'found a match: `{day}`')  
1 голос
1 голос
/ 18 июня 2019

Это потому, что .split() возвращает список.Вы должны будете повторить пункты вашего списка.По сути, вы спрашиваете компьютер, если

["http://www.espncricinfo.com/series/13224/scorecard/426406/scotland", "vs", "england", "only", "odi", "england", "in", "scotland", "odi", "match", "2010"]

находится в каком-то списке, который выглядит следующим образом (я предполагаю):

["england", "scotland", "ireland", ...]

Я предлагаю вам использовать несколько операторов печати.Простой print(d) показал бы это поведение.Вам придется перебрать d:

for word in d:
    if word in all_countries:
        print(word)
        break # otherwise multiple words will trigger your logic multiple times
0 голосов
/ 18 июня 2019

В вашем случае

all_countries=['England','India','West Indies']
    for day in one_day:
            d=day.split('-')
            if d in all_countries:
                print(day)
            else:
                next

вы делаете d = day.split('-') d также является списком, поэтому вам нужно выполнить итерацию d и затем проверить значение в стране, еще один момент заключается в том, что вы all_countries можете содержать Captlize название страныпоэтому перед преобразованием условия

необходимо преобразовать их в нижний регистр. Вот фрагмент кода, который может помочь

all_countries=['England','India','West Indies']

for day in one_day:
    d=day.split('-')
    for val in d:
        if val.lower() in [x.lower() for x in all_countries ]:
            print(day)
        else:
            next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...