Python 如果URL具有特定关键字,则打印URL
我有一个从espn中提取URL的函数。URL看起来像这样 我已经创建了一个国家列表,如果url包含列表中的国家,我想打印一条消息,否则将传递到下一个urlPython 如果URL具有特定关键字,则打印URL,python,list,for-loop,Python,List,For Loop,我有一个从espn中提取URL的函数。URL看起来像这样 我已经创建了一个国家列表,如果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: pr
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
它不起作用。非常感谢您的帮助,因为.split()
会返回一个列表。您必须迭代列表中的项目。本质上,你问计算机的是如果
["http://www.espncricinfo.com/series/13224/scorecard/426406/scotland", "vs", "england", "only", "odi", "england", "in", "scotland", "odi", "match", "2010"]
在一些列表中,如下所示(我假设):
我建议你使用一些打印语句。一个简单的打印(d)
将显示这种行为。您必须迭代d
:
for word in d:
if word in all_countries:
print(word)
break # otherwise multiple words will trigger your logic multiple times
下面是一个简单的方法(假设
one_day
是一个URL列表,而all_country
是一个国家名称列表):
#(URL和国家名称的一些示例值)
一天http://www.espncricinfo.com/...-vs-australia-only-odi-au...',
'http://www.espncricinfo.com/...scotland-vs-england-only-...']
所有国家=[“印度”、“爱尔兰”、“澳大利亚”]
对于一天中的一天:
对于所有国家/地区的国家/地区:
如果country.lower()以天为单位:
打印(f'找到了{country}:`{day}`的匹配项)
#或只是:打印(天)
这是因为中的检查子字符串,例如:
'Australia'.lower()在“…-与仅澳大利亚的odi au…”
##真的
这就是您在每天的条件country.lower()内循环的每次迭代中检查的内容
p、 如果你担心类似于'USA'
匹配包含'-musac…'
或类似内容的url的情况,你也可以像在原始帖子中一样在'-'
上拆分。要做到这一点,你可以这样说:
对于一天中的一天:
日分割=日分割('-'))
对于日分割中的元素:
如果[c.lower()中的元素表示所有国家/地区的c]:
打印(f'找到匹配项:{day}`)
或使用正则表达式更灵活;):
结果:
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
就你而言
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=['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
添加您的国家/地区列表删除else:next
。恐怕d
不是您所想的。看看这个。阅读一些调试代码的技巧。特别是,您应该添加print(d)
以查看其值。您解析URL的逻辑需要更加复杂。首先,您可以忽略最后一个/
之前的所有内容。其次,你只需要在字符串的其余部分找到国家名称。我不喜欢正则表达式。俗话说,“曾经有一个程序员有一个问题。他决定用正则表达式来解决它。现在他有两个问题。”XDI有三个问题,因为我是化学家。但是,当您想灵活地编写与某些内容匹配的代码时,Regex非常酷:)这似乎很有趣。你有任何我可以参考的链接来理解这个方法并了解它吗?我想如果我们指定.split()
[”http://www.espncricinfo.com/series/13224/scorecard/426406/scotland“,“vs”,“england”,“only”,“odi”,“england”,“in”,“scotland”,“odi”,“match”,“2010”]
生成,第一个索引的最后一个单词在本例中被忽略,不幸的是,这是一个国家名称。如果我们可以使用正则表达式,并根据需要在split中指定分隔符,那就更好了。例如:import re
d=re.split(“[^a-zA-Z]”,day)
@KiranMayeeMaddi-hmmm,是的,很好。虽然OP可以.split(“/”
,如果他们真的想在开始时处理URL的部分!谢谢你指出这一点
all_countries=['England','India','West Indies']
for day in one_day:
d=day.split('-')
if d in all_countries:
print(day)
else:
next
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