为什么我的Python内部不能正常工作?

时间:2015-08-16 10:07:26

标签: python loops for-loop

我是python的新手,我见过的例子不回答我的问题。

我试图读入两个文件,主机和域名列表,并将域列表的内容附加到主机上,添加句点并打印结果。

我已经为第一台主机正确执行了此操作,但只打印了具有句点的下两台主机。

h = open('hosts', 'r')
s = open('domainlist', 'r')
for host in h.read().split():
    for domain in s.read().split('\n'):
        print host+"."+domain

h.close()
s.close()

这打印出以下

google.gov
google.com
google.net
google.org
google.co.uk
google.com.au
google.com.sg
yahoo.
dogpile.

'hosts'文件包含以下主机

google
yahoo
dogpile

“域名列表”包含以下内容

gov
com
net
org
co.uk
com.au
com.sg

1 个答案:

答案 0 :(得分:2)

所有这些分裂和阅读是什么?

对文件进行简单迭代不需要使用split()也不需要使用read() - 您可以直接在文件对象上进行迭代。我还建议使用with

with open('hosts') as h, open('domainlist') as s:
    for host in h:
        for domain in s:
            print '{}.{}'.format(host.strip(), domain.strip())
        s.seek(0)

请注意使用seek(0)返回每个主机的域文件的开头。

<强>输出

google.gov
google.com
google.net
google.org
google.co.uk
google.com.au
google.com.sg
yahoo.gov
yahoo.com
yahoo.net
yahoo.org
yahoo.co.uk
yahoo.com.au
yahoo.com.sg
dogpile.gov
dogpile.com
dogpile.net
dogpile.org
dogpile.co.uk
dogpile.com.au
dogpile.com.sg

使用itertools.product()的另一种方式:

from itertools import product

with open('hosts') as h, open('domainlist') as s:
    print '\n'.join('.'.join(x.strip() for x in t) for t in product(h, s))