2011-12-31 93 views
2

我想编辑python脚本中的Apache2配置文件。我想向ServerAlias指令添加或删除域名,以便脚本需要编辑特定文件并搜索以“ServerAlias”开头的行并向该行附加或删除特定的域名。在Python中的特定行添加或删除文件中的某些文本

我不知道该怎么做,任何暗示在文档将不胜感激,我也在考虑使用一个子进程来使用一些bash工具,如sed。工具

+0

为什么它需要是Python? – 2011-12-31 07:41:32

+0

因为它是Django项目的一部分,所以在整个项目中使用相同的语言会很好。并且因为我喜欢Python :) – Bastian 2011-12-31 09:32:30

+0

[在Python中搜索并替换文件中的一行]可能的重复(http://stackoverflow.com/questions/39086/search-and-replace-a-line-in-a- python) – joaquin 2011-12-31 10:06:34

回答

0

夫妇,你需要为你的交易

  1. str.startswith
  2. str.join或只是+(字符串concatination)
  3. readline读取文件按顺序一个
  4. Offcourse opening and closing a file
  5. write a file
+0

如果有人不遵循链接并查看它,xreadlines将被弃用。此外,他可能需要str.split甚至正则表达式,如果他追加到 – jdi 2011-12-31 07:46:35

+0

@jdi上的值,谢谢我更新了这篇文章。只要没有正则表达式就可以选择它。由于OP只是想检查该行是否以某个字符串开头,并且只是在其上附加一个字符串,所以OP可能不需要正则表达式。 – Abhijit 2011-12-31 07:59:03

+0

看起来我有我需要详细说明的脚本,谢谢。如果有人能够提供一个简单的例子,说明这些工具如何相互影响,那才是完美的。 – Bastian 2011-12-31 09:51:27

1

可以使用fileinput.input与就地模式:

import fileinput 

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

从文档:

如果关键字参数就地= True时,传递给fileinput.input()或 到的FileInput构造函数中,文件被移动到备份文件并且标准输出被定向到输入文件(如果一个名称与备份文件名称相同的文件已经存在,它将被无提示地替换)。 这使得可以编写一个过滤器来重写其输入文件 。如果给出备份参数(通常为 backup ='。'),则它指定备份文件的扩展名,并且备份文件保留在附近;默认情况下,扩展名为 '.bak',并在输出文件关闭时被删除。当读取标准输入时,原位 过滤被禁用。

+0

在行后加逗号:'print line,'否则会有不必要的换行符。 – jfs 2011-12-31 10:57:04

+0

@ J.F.Sebastian谢谢! DONE – joaquin 2011-12-31 13:54:05

相关问题