在Python中的特定行追加或删除文件中的某些文本

在Python中的特定行追加或删除文件中的某些文本,python,file,unix,text,Python,File,Unix,Text,我想在python脚本中编辑Apache2配置文件。我想在ServerAlias指令中添加或删除域名,因此脚本需要编辑特定文件并搜索以“ServerAlias”开头的行,然后在该行中追加或删除特定域名 我不知道该怎么做,如果能提供任何文档方面的提示,我将不胜感激,我也在考虑使用一个子流程来使用一些bash工具,比如sed。您的交易需要一些工具 或者只是+(字符串浓缩) 按顺序读取文件 您可以将fileinput.input与就地模式一起使用: import fileinput for l

我想在python脚本中编辑Apache2配置文件。我想在ServerAlias指令中添加或删除域名,因此脚本需要编辑特定文件并搜索以“ServerAlias”开头的行,然后在该行中追加或删除特定域名


我不知道该怎么做,如果能提供任何文档方面的提示,我将不胜感激,我也在考虑使用一个子流程来使用一些bash工具,比如sed。

您的交易需要一些工具

  • 或者只是
    +
    (字符串浓缩)
  • 按顺序读取文件

  • 您可以将fileinput.input与就地模式一起使用:

    import fileinput
    
    for line in fileinput.input("mifile", inplace=True):
        if line.startswith("ServerAlias"):
            line = doherewhatyouwant(line)
        print line,
    
    从文档:

    如果关键字参数inplace=True传递给fileinput.input()或 对于FileInput构造函数,文件被移动到备份文件并 标准输出被定向到输入文件(如果是相同的文件 名称由于备份文件已存在,将以静默方式替换它)。 这使得编写重写其输入文件的过滤器成为可能 在正确的位置如果给定了备份参数(通常为 backup='.',它指定备份的扩展名 文件,并且备份文件仍然存在;默认情况下,扩展名为 “.bak”,并在关闭输出文件时将其删除。到位 读取标准输入时禁用过滤


    为什么它必须是Python?因为它是Django项目的一部分,所以在整个项目中使用相同的语言会很好。而且因为我喜欢Python:)如果有人不跟随链接并看到它,xreadlines可能会重复,因此不推荐使用。此外,如果要将str.split甚至regex附加到line@jdi,谢谢,我已经更新了帖子。只要没有正则表达式,人们就应该选择它。由于OP只是想检查行是否以某个字符串开头,并在其上附加一个字符串,OP可能不需要正则表达式。看来我已经准备好了制作脚本所需的全部内容,谢谢。如果有人能提供一个简单的例子来说明这些工具是如何相互作用的,那就太完美了。在行后添加逗号:
    打印行,
    ,否则会有不必要的换行符。