提供“n”个URL时查找特定类型的URL

2024-09-30 22:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

这将是我的示例数据:

lis = ['http://wiki.dbpedia.org/about','http://dbpedia.org/data/Category:Cybercrime.rdf',
 'http://dbpedia.org/resource/Stop_Cyberbullying_Day', 
 'http://dbpedia.org/resource/Category:Cybercrime_in_Canada', 
 'http://dbpedia.org/resource/Political_repression_of_cyber-dissidents',  
 'http://creativecommons.org/licenses/by-sa/3.0/']

我使用下面的代码只过滤那些包含http://dbpedia.org/resource/的URL

c = 'http://dbpedia.org/resource/'
for i in lis:
    if i[:27] is c:
        print (i)

预期产出应为:

http://dbpedia.org/resource/Stop_Cyberbullying_Day
http://dbpedia.org/resource/Category:Cybercrime_in_Canada
http://dbpedia.org/resource/Political_repression_of_cyber-dissidents'

但是打印NULL


Tags: ofinorghttpresourcedbpediastoppolitical
2条回答

is运算符检查其操作数的标识。
只需将str.startwith用于您的简单案例:

lst = ['http://wiki.dbpedia.org/about','http://dbpedia.org/data/Category:Cybercrime.rdf',
 'http://dbpedia.org/resource/Stop_Cyberbullying_Day',
 'http://dbpedia.org/resource/Category:Cybercrime_in_Canada',
 'http://dbpedia.org/resource/Political_repression_of_cyber-dissidents',
 'http://creativecommons.org/licenses/by-sa/3.0/']

c = 'http://dbpedia.org/resource/'
for url in lst:
    if url.startswith(c):
        print(url)

输出:

http://dbpedia.org/resource/Stop_Cyberbullying_Day
http://dbpedia.org/resource/Category:Cybercrime_in_Canada
http://dbpedia.org/resource/Political_repression_of_cyber-dissidents

代码中有两个问题:

  1. 您正在使用is进行比较,它比较两个对象的身份,而不是相等。您想改用==
  2. 您的字符串('http://dbpedia.org/resource/')长度为28个字符,但您正在将其与i的前26个字符进行比较。将i[:27]替换为i[:29],或者更好地使用i[:len(c)]使其使用c字符串动态更改

尽管如此,您应该使用str.startswith(),它基本上为您完成了所有这些:

for i in lis:
    if i.starswith(c):
        print(i)

相关问题 更多 >