为什么python在替换一行时删除给定文件中的每一行?

时间:2017-12-27 12:13:14

标签: python linux rhel

我有一个配置文件,我希望将IPADDR=someIP开头的行替换为我的变量ipaddr

中存储的值

我的代码:

for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
    if line.strip().startswith('IPADDR='):
        line ="IPADDR="+ipaddr
        sys.stdout.write(str((line)) + "\n")

它确实正确设置了我想要的行,但也删除了所有其他行,但它只应删除空行,为什么不保留其他现有行?

THX

3 个答案:

答案 0 :(得分:4)

你应该write line所有行:

for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], 
                            inplace=True):
    if line.strip().startswith('IPADDR='):
        line ="IPADDR="+ipaddr
    sys.stdout.write(str((line)) + "\n")  #<-- here, indentation

要跳过空行,方法可能是:

    ...
    stripped = line.strip()
    is_not_blank = bool( stripped )
    startswithIPADDR = not is_blank and stripped.startswith('IPADDR=')
    if is_not_blank:
        if startswithIPADDR:
            line ="IPADDR="+ipaddr
        sys.stdout.write(str((line)) + "\n")  #<-- here, indentation

答案 1 :(得分:1)

一切都很好,除非你没有写出不以&#39; IPADDR&#39;开头的文件的其余部分,只需添加该行,一切都应该是好的。

for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
    if line.strip().startswith('IPADDR='):
        line ="IPADDR="+ipaddr
        sys.stdout.write(str((line)) + "\n")
    elif len(line.strip()) > 0: # add this and below line
        sys.stdout.write(line) + "\n")

答案 2 :(得分:0)

终于使用:

解决了它
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
    if line.strip().startswith('IPADDR='):
        line ="IPADDR="+ipaddr
        sys.stdout.write(str((line)) + "\n")
    elif len(line.strip()) > 0:
        sys.stdout.write(str((line) + "\n"))
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
        line = line.strip()
        if line == '': continue
        print line

非常感谢你们两个人!