2017-03-29 10 views
0

私はルータからIPのリストをスクラップするスクリプトを持っています。最終的な出力は次のようになります。リストを連結した文字列を印刷できません

if net ~ [ 
12.5.161.0/24, 
12.9.242.0/24, 
12.11.215.0/24, 
12.17.239.0/24, 
.... etc etc 
216.248.237.0/24, 
216.248.238.0/24, 
216.248.239.0/24, 
216.251.224.0/19, 
216.253.79.0/24 
] then { 
    accept; 
} else { 
    reject; 
} 

私はに実行PRBが糸引きされて、私は適切なフォーマットでIPアドレスのリストを取得することができますポイント、すなわち

12.5.161.0/24, 
12.9.242.0/24, 
12.11.215.0/24, 
12.17.239.0/24, 
.... etc etc 
216.248.237.0/24, 
216.248.238.0/24, 
216.248.239.0/24, 
216.251.224.0/19, 
216.253.79.0/24 

に得ています一緒に最初のstrと私のすべてのIPを中央に1つのバッチとして、最後に4行の文字列として。

routes = get_bird_routes(args.s) 
prefixes = parse_routes(routes, args.p) 
dropped = drop_prefixes(prefixes, args.d) 
for p in dropped: 

    lines = [ "if net ~ [",  str(p), "] then {", " accept;", "} else {", " reject;",  "}\n" ] 
    print "\n".join(lines) 

をが、これはBEGでのみ最後に私

if net ~ [ 
199.89.247.0/24 
] then { 
    accept; 
} else { 
    reject; 
} 

if net ~ [ 
192.149.228.0/24 
] then { 
    accept; 
} else { 
    reject; 
} 

if net ~ [ 
206.180.165.0/24 
] then { 
    accept; 
} else { 
    reject; 
} 
代わりに一緒にすべての私のIPの

とstrを与える:

は、これまでのところ私が持っています。私はどのタイプ(p)が(それをstr(p)にセットする前に)何を参照しようとしましたが、それはユニコードに戻りました。文書を見ると、私は何が間違っているのかをはっきりと理解できませんでした。まだPythonに新しく、どんな助けもありがとう!

答えて

0

droppedに参加する必要があります。ループしないでください。

+0

私はここに私のエラーを参照してください。これは完全にうまくいった – Mara55789

0

str()join()を文字列にあなたのリストを変換してみます。次に、1つの文字列を.format()でロジック文(文字列)にマージします。

ビズ:

dropped_as_strs = map(str, dropped)  # "a", "b", "c" 
dropped_str = ',\n'.join(dropped_as_strs) # "a,\nb,\nc" 

logic = "if net ~ [\n{}\n] then {{\n accept;\n}} ..." 

result = logic.format(dropped_str) 

str.format()呼び出しで '{' と '}' 倍増する必要性に注意してください。)

+0

私は前に似たようなことをしようとしましたが、うまく動作しませんでした 'line = [" if net〜["、str(p)、"] then {"、" accept; "、else} 、 "reject;"、 "} \ n"] print "\ n" .join(lines) ' – Mara55789

関連する問題