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)