Форум сайта python.su
Всем, привет! Наткнулся на простой вопрос и что-то не то…
Есть данные:
auto vlan846
iface vlan846 inet static
address 10.8.46.251
netmask 255.255.255.0
vlan_raw_device eth0
auto vlan847
iface vlan847 inet static
address 10.8.47.251
netmask 255.255.255.0
vlan_raw_device eth0
auto vlan848
iface vlan848 inet static
address 10.8.48.251
netmask 255.255.255.0
vlan_raw_device eth0
iface vlan846 inet static address 10.8.46.251 netmask 255.255.255.0
iface vlan847 inet static address 10.8.47.251 netmask 255.255.255.0
iface vlan848 inet static address 10.8.48.251 netmask 255.255.255.0
Офлайн
text.replace('\n\n','~').replace('\n',' ').replace('~','\n')
Офлайн
avdoshkinПокажите код.
В общем результат у меня нулевой получается.
Офлайн
у меня посложнее, чем у o\d+, зато стойко к появлению ~
import re
s1 = """auto vlan846
iface vlan846 inet static
address 10.8.46.251
netmask 255.255.255.0
vlan_raw_device eth0
auto vlan847
iface vlan847 inet static
address 10.8.47.251
netmask 255.255.255.0
vlan_raw_device eth0
auto vlan848
iface vlan848 inet static
address 10.8.48.251
netmask 255.255.255.0
vlan_raw_device eth0"""
s2 = re.sub(r"auto vlan\d+\n|vlan_raw_device \w+(\n|$)", r"", s1)
s2 = re.sub(r"([^\n])\n", r"\1 ", s2)
print s2
Офлайн
pasaranaxугу. И в общем-то решает поставленную задачу, в отличие от первого варианта, который не выбрасывает лишние параметры.
у меня посложнее, чем у o\d+, зато стойко к появлению ~
for block in text.split("\n\n"):
print "%(iface)s %(address)s %(netmask)s" % dict(((line.split()[0], line) \
for line in block.split('\n') if line))
Офлайн
Всем кто ответивший на мой вопрос спасибо! Прочитал все ваши ответы и подвел к общему знаменателю.
f = open('/root/interfaces','r').read()
for block in f.split('\n\n'):
print block.split()
Результат:
Офлайн
Это общий знаменатель чего? Внимательнее посмотрите мой код.
Офлайн
Вот так лучше:
s2 = [(block.split("\n")[1:4]) for block in s1.split("\n\n")]
s2 = "\n".join(["".join(block.split("\n")[1:4]) for block in s1.split("\n\n")])
Офлайн