python - 使用 Python 进行 Linux 静态路由规则文件格式转换
问题描述
我想把存储在Linux中/etc/sysconfig/network-scripts/route- interface文件中的静态路由配置规则从这种格式转换
ADDRESS0=X.X.X.X
NETMASK0=X.X.X.X
GATEWAY0=X.X.X.X
ADDRESS1=X.X.X.X
NETMASK1=X.X.X.X
GATEWAY1=X.X.X.X
到
X.X.X.X/X via X.X.X.X (i.e) IP/prefix via Gateway
X.X.X.X/X via X.X.X.X
使用蟒蛇。
有没有图书馆可以这样做?
我已经通过以下方式进行了尝试(尚未完成):
import glob
import fileinput
import os,sys
files = glob.glob('./route-*')
if files:
for f in files:
if os.path.isfile(f):
listoflines = []
i = 0
for line in open(f):
flag = 0
if line.startswith("ADDRESS" + str(i)):
listoflines.append([])
listoflines[i].append(line.strip().split("=")[1])
flag = 1
elif line.startswith("NETMASK" + str(i)):
netmask = line.strip().split("=")[1]
prefix = sum([bin(int(n)).count("1") for n in netmask.split(".")])
listoflines[i][0] = listoflines[i][0] + "/" + str(prefix)
flag = 2
elif line.startswith("GATEWAY" + str(i)):
listoflines[i][2] = line.split("=")[1]
flag = 3
if flag == 3:
listoflines[i][1] = "via"
i += 1
print listoflines
欢迎输入上述代码!
解决方案
使用正则表达式:
演示:
import re
s = """ADDRESS0=I1.X.X.X
NETMASK0=X.X.X.X
GATEWAY0=G1.X.X.X
ADDRESS1=I2.X.X.X
NETMASK1=X.X.X.X
GATEWAY1=G2.X.X.X""" #--> s represents content from file
ipVals = re.findall("ADDRESS\d+\=(.*)", s, flags=re.IGNORECASE)
gateWayVals = re.findall("GATEWAY\d+\=(.*)", s, flags=re.IGNORECASE)
for i, g in zip(ipVals, gateWayVals):
stringToWrite = "{0} via {1}".format(i, g)
print(stringToWrite) # --> Write back to file
输出:
I1.X.X.X via G1.X.X.X
I2.X.X.X via G2.X.X.X
推荐阅读
- python - CDIST 有时会选择错误的值
- json - 如何以 json (或其他方式)存储函数并快速解析它们?
- angular - 以角度更新每日基础上的 Apexchart 系列
- php - 如何生成 10 位唯一号码,在 laravel 上注册后发送给用户
- python - Tensorflow 可以自定义激活层自动微分并且不需要指定梯度或权重吗?
- terraform - Terraform:将服务器增量添加到部署中的最简单方法是什么?
- angular - 我的拦截器上未定义构造函数变量(Angular 8)
- c++ - 使用 PROTOC -- DECODE_RAW 将字节流反序列化为字符串后,如何将字符串序列化为字节流
- sql - sql查询查找输出
- javascript - 从 react-native 中的另一个 .js 文件中改变一个 .js 文件中存在的数组