2016-11-18 9 views
0

私はテキストファイルに書き込んでいますが、期待通りに正しく動作しません。ここでPython - 効率的な方法でファイルに書き込むことができますか?

は、私が持っているものです。

#!/usr/lib/env python 
import re 

file = open("address.txt","r") 
content = file.read() 
file.close() 
content = content.split('LAN ')[1:] 
dic = {} 
for lan in content: 
    dic[int(lan[0])] = lan[1:] 



def address(lan_index): 
    address = re.findall('address\s(.*?)\s',dic[lan_index]) 
    if len(address) > 0: 
     print 'LAN', lan_index, ":", address[0] 
    else: 
     print 'No Address Found!' 
    return address[0] 


ad1 = str(address(1)) 
new_ad = ad1 
var1 = 'ad1' 


filedata = None 
with open('address.txt', 'r') as file : 
    filedata = file.read() 

filedata = filedata.replace(ad1 , var1) 

with open('address.txt', 'w') as file: 
    file.write(filedata) 

ここに私のテキストファイルです:

#line addresses LAN 1 
     address 192.168.6.6 
     network 192.168.6.6 

は私の問題は、私はvar1ためad1を交換したい場合、それは私のaddressだけではnetworkを置き換えますを交換する習慣であります彼らは同じIPを持っています。

私の出力はこのようなものです:

アドレスAD1

ネットワークAD1

は、この問題を回避し、このような何かを得るための効率的かつ可能な方法があります:

アドレスad1

ネットワーク192.168.6.6

可能であれば、私は非常に感謝しています。 ありがとう

+1

ファイルを行単位で読み込みますか?ネットワークではなく、アドレスを含む場合にのみ回線を交換しますか? –

+0

@ cricket_007悪い考えではありません。シンプルなマッチだけが必要な場合、正規表現は実際には単純な文字列操作より遅いことがよくあります。正規表現の利点は柔軟性と複雑なパターンであり、スピードではありません。 – Aaron

答えて

2

filedata.replace(ad1 , var1)は貪欲であるため、あなたの住所は両方とも置き換えられています。オプションの第3引数:filedata.replace(ad1 , var1, 1)に最大で1の置換を行うように指定するか、キャプチャグループを拡張することができます。'(address\s.*?)\s'に「アドレス」を含めると、var1 = "address ad1"になります。filedata.replaceは、アドレス "

関連する問題