繁体   English   中英

关联文件中的两个连续行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM