【问题标题】:Why is python removing each line in the given file when replacing one line?为什么在替换一行时python会删除给定文件中的每一行?
【发布时间】:2017-12-27 12:13:14
【问题描述】:

我有一个配置文件,我想用我的变量 ipaddr 中存储的值替换以 IPADDR=someIP 开头的行

我的代码:

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")

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

谢谢

【问题讨论】:

    标签: python linux rhel


    【解决方案1】:

    你应该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
    

    【讨论】:

      【解决方案2】:

      一切都很好,除了您没有编写不以“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")
          elif len(line.strip()) > 0: # add this and below line
              sys.stdout.write(line) + "\n")
      

      【讨论】:

      • 非常感谢!这解决了我的问题:-)) @johnIl
      • 如果line.strip().startswith('IPADDR=')len(line.strip()) &gt; 0 都是true 那么会执行上半身。那你的问题怎么解决??@esha
      • 不,它的 if 或 elif 将被执行,永远不会同时执行
      【解决方案3】:

      终于解决了:

      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
      

      非常感谢你们!

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 2012-04-04
        • 2019-01-04
        • 2021-06-12
        • 2023-03-16
        • 1970-01-01
        • 2019-01-05
        • 2021-04-09
        • 2016-05-13
        相关资源
        最近更新 更多