1

ファイルを読み取り、キーワードでグループ化します。リストもありますが、リストの値がグループ内にあるかどうかを確認するにはどうすればよいですか? 1 つのエントリだけをチェックするのではなく、リスト内のすべてのエントリをグループに対してチェックします。

例ですが、グループに対するチェックリストではありません。私はもしあれば、またはすべてのブラブラを書きたくありません。

hosts = ['blabla.dyndns.org','blabla1.dyndns.org']
   with open(testfile,'r') as f:
       for key,group in it.groupby(f,lambda line: line.startswith('[hosts]')):
           if not key:
               group = list(group)
               if any("blabla.dyndns.org" in s for s in group) or any("blabla.dyndns.org" in s for s in group):
                   print 'yes'
               else:
                   print 'no'

よろしくお願いします。


たとえば、一部のホストのプロトコルを変更できるスクリプトが必要です。

import itertools as it
testfile='blabla.txt'

hosts = set(['blabla.dyndns.org','blabla1.dyndns.org'])

with open(testfile,'r') as f:
    for key,group in it.groupby(f,lambda line: line.startswith('[host]')):
        if not key:
            group = set(group)
            if group & hosts: # set intersection
                print '[host]\n'
                for (i, item) in enumerate(group):
                    if 'protocol' in item:
                        group[i] = 'protocol     = udp\n'
                j = ', '.join(group)
                y = j.replace(", ", "")
                print y
            else:
                print '[host]\n'
                j = ', '.join(group)
                y = j.replace(", ", "")
                print y

exit(0)

動作しません。

4

1 に答える 1

2

セット交差を使用します。

hosts = set(['blabla.dyndns.org','blabla1.dyndns.org'])
with open(testfile,'r') as f:
    for key,group in it.groupby(f,lambda line: line.startswith('[hosts]')):
        if not key:
            group = set(group)
            if group & hosts: # set intersection
                print 'yes'
            else:
                print 'no'
于 2012-09-27T00:16:24.050 に答える