[英]Relating two consecutive lines in a file
我有一个重复行的txt文件,如下所示:
Host: http://de.wikipedia.org Referer: http://www.wikipedia.org Host: answers.yahoo.com/ Referer: http://www.yahoo.com Host: http://de.wikipedia.org Referer: http://www.wikipedia.org Host: http://maps.yahoo.com/ Referer: http://www.yahoo.com Host: http://pt.wikipedia.org Referer: http://www.wikipedia.org Host: answers.yahoo.com/ Referer: http://www.yahoo.com Host: mail.yahoo.com Referer: http://www.yahoo.com Host: http://fr.wikipedia.org Referer: http://www.wikipedia.org Host: mail.yahoo.com Referer: http://www.yahoo.com
我正在尝试使用这段代码来检查代码行,并查看通过同一引荐来源访问了多少主机:
dd = {}
for line in open('hosts.txt'):
if line.startswith('Host'):
host = line.split(':')[1].strip('\n')
elif line.startswith('Referer'):
referer = line.split(': ')[1].strip('\n')
dd.setdefault(referer, [0 , host])
dd[referer][0] += 1
print dd
例如,从Wikipedia.org网站访问了多少个链接或域。
我只希望第一个引荐来源网址的首次出现,对于属于该引荐来源网址的主机,我希望将它们的总数加起来,而忽略已经为同一引荐来源网址计算的主机,因此基本上只要引荐来源网址和主机为相同,它们已经被计算在内,我希望它们被忽略,以“ referrer”作为键,并将唯一主机的总和作为值,如下所示:
{'http://www.wikipedia.org':3,'www.yahoo.com':2}
我的代码的问题在于,它汇总了同一引荐来源网址的所有重复主机,因为我不知道如何关联“ Host”和“ Referer”行。 因此,任何提示或帮助都将受到高度赞赏。
您可以为词典中的每个引荐来源网址设置一个集合,而不只是一个数字。 这样,您可以将每个主机添加到集合中,重复项将自动被丢弃。 要获取引荐来源网址的主机数,请获取集合中的元素数。
dd = {}
referrer = None
for line in open('hosts.txt'):
if line.startswith('Host'):
host = line.split(': ')[1].strip('\n')
elif line.startswith('Referer'):
referrer = line.split(': ')[1].strip('\n')
if referrer is not None:
dd.setdefault(referrer, set()).add(host)
referrer = None
for k, v in dd.iteritems():
print k, len(v)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.