Python 文件中不同命令中的多个ip替换
我将以下命令集存储在一个文件中Python 文件中不同命令中的多个ip替换,python,Python,我将以下命令集存储在一个文件中 ip ospf db area 0.0.0.0 rtr <ip> adv <ip> ip ospf db area 0.0.0.0 rtr <ip> self-originate ip ospf db area 0.0.0.0 rtr <ip> ip ospf db area 0.0.0.0 rtr adv <ip> ip ospf db area 0.0.0.0 rtr orig ip ospf
ip ospf db area 0.0.0.0 rtr <ip> adv <ip>
ip ospf db area 0.0.0.0 rtr <ip> self-originate
ip ospf db area 0.0.0.0 rtr <ip>
ip ospf db area 0.0.0.0 rtr adv <ip>
ip ospf db area 0.0.0.0 rtr orig
ip ospf db area 0.0.0.0 rtr
有人能建议一种方法吗?所有IP都不同,这些类型的命令多得多。整个文件都需要解析,IP需要用正确的值替换。正如DarinDouglass所说,您需要有一种方法来区分IP。如果文件具有固定格式,并且您希望将第一个出现的
替换为某个IP,将第二个替换为另一个IP,依此类推,您可以执行以下操作:
import re
def replacer(l):
i = iter(l)
replace = lambda x: i.next()
return replace
# example usage:
print re.sub("e", replacer(["1", "2", "3"]), "This is a sentence")
# prints "This is a s1nt2nc3"
re.sub
接受返回字符串的自定义函数replacer
返回一个函数,调用该函数时,返回列表中的下一个元素l
如果您提供有关问题的更多详细信息,我可以为您提供更多帮助。如果您知道ip地址的顺序列表:
ip_token = "<ip>" # your ip positionning substring
ip_list = ["127.0.0.1","127.0.0.2",...] # your ip list
with open("myfile","r+") as f:
old = f.read()
f.seek(0)
#loop through file content
for line in old:
modified_line = line
#replace the tokens by the ips
while "<ip>" in modified_line:
modified_line = modified_line.replace(ip_token,ip_list.pop(0),1)
f.write(modified_line)
ip_token=”“#您的ip定位子字符串
ip#u列表=[“127.0.0.1”、“127.0.0.2”、…]#您的ip列表
打开(“myfile”、“r+”)作为f:
old=f.read()
f、 搜索(0)
#循环浏览文件内容
对于旧版本中的行:
修改的线=线
#用IP替换令牌
当“”位于修改的_行中时:
modified_line=modified_line.replace(ip_令牌,ip_列表.pop(0),1)
f、 写入(修改的_行)
将IP存储为元组列表。每个元组表示一行,元组中的每个IP表示IP的替换顺序
然后遍历文件
对于每一行,使用枚举
获取其在文件中的位置,找到
的位置,并将其替换为使用索引从元组列表中获取的元组
如果元组列表中没有该索引的元素,则表示没有可替换的元素
这种方法的问题是,元组列表中的项需要与行数一样多,如果要替换的文件很大,这将是一种浪费。为了避免这种情况,可以使用字典,其中键是行号,值是表示要替换的IP的元组 有没有办法区分哪个标签需要用哪个IP地址替换?没有,这对于所有命令都很常见,因此也无法执行全局搜索和替换。即使在包含#后仍看到此错误!在第一行中,
python2.5 ipstuff.py ipstuff.py:6:警告:“with”将成为Python 2.6文件“ipstuff.py”中的保留关键字,第6行中的open(“myfile.txt”,“r+”)为f:^SyntaxError:invalid syntax
这是Python 2.7,而不是2.5。你可以很容易地翻译它
ip_token = "<ip>" # your ip positionning substring
ip_list = ["127.0.0.1","127.0.0.2",...] # your ip list
with open("myfile","r+") as f:
old = f.read()
f.seek(0)
#loop through file content
for line in old:
modified_line = line
#replace the tokens by the ips
while "<ip>" in modified_line:
modified_line = modified_line.replace(ip_token,ip_list.pop(0),1)
f.write(modified_line)