2011-12-31 63 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

相關問題