2010-02-22 49 views
1

我有文件,這樣的事情文件操作和查找單詞和棘手的替代

hostname ser1-xyz 
myuser name 
passwd secret 
group 1234 

hostname ser2-xyz 
myuser name 
passwd secret 
group 2345 

我需要找到一個名爲「SER1-XYZ」主持人的行頭亮相,並修改它爲 「SER1」和增加這1

組值,使得最終的文件看起來像:

hostname ser1 
myuser name 
passwd secret 
group 1235 

hostname ser2-xyz 
myuser name 
passwd secret 
group 2345 

目前我下面的代碼,它可以修改「SER1-XYZ」到「SER1」

 for line in fileinput.FileInput(fn,inplace=1): 
       line = line.replace(search,replace) 

但是如何增加組值?

+0

你能夠改變文件的格式嗎?這看起來提供了一個類似於/ etc/passwd文件的功能。在passwd文件中,每條記錄都在一行中,並且這些字段以冒號分隔。這將使它更容易操作。 – 2010-02-22 09:56:09

+0

不,我無法更改文件格式。這就是我收到這個文件的方式。感謝您的查詢,下面的代碼爲我工作。 – 2010-02-22 10:01:19

回答

2

單程

import fileinput 
f=0 
for line in fileinput.input("file",inplace=0): 
    if "hostname" in line and "ser1-xyz" in line: 
     line=line.replace("ser1-xyz","ser1") 
     f=1 
    if f and "group" in line: 
     a=line.rstrip().split(" ") 
     a[-1]=str(int(a[-1])+1) 
     line=' '.join(a) 
     f=0 
    print line.rstrip() 

輸出

$ ./python.py 
hostname ser1 
myuser name 
passwd secret 
group 1235 

hostname ser2-xyz 
myuser name 
passwd secret 
group 2345 

變化inplace=0inplace=1用於就地編輯。

+0

哇..酷感謝它完美的作品。我會用你的代碼:) – 2010-02-22 09:59:57