无法打印与列表连接的字符串

时间:2017-03-29 22:14:37

标签: python string join

我有一个脚本可以从路由器中清除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;
}

我已经达到了能够以正确格式获取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

我遇到的prb将开头的str与所有IP串在一起,中间是一个批次,最后是4行str。

到目前为止,我有:

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)

但是这给了我

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)之前)它回来了unicode。看看这份文件,我没有清楚地了解我做错了什么。对于蟒蛇仍然是新的,任何帮助都赞赏!!

2 个答案:

答案 0 :(得分:0)

您应该加入dropped,而不是循环播放。

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

答案 1 :(得分:0)

尝试将您的列表转换为包含str()join()的字符串。然后将一个字符串合并到您的逻辑语句(字符串)中.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()次调用中加倍“{”和“}”。)