2009-12-05 63 views
0

我已經編寫了一個小程序來替換一組字符,但我還希望在一個程序中使用兩個或多個替換命令。在Jython中替換多行

除此之外,我還想在隨機設置的字符後添加一個括號。

這是我的計劃

file_read=open('<%=odiRef.getOption("READ")%>/EXPORT.XML','r') 
file_write=open('<%=odiRef.getOption("READ")%>/EXPORT_1.XML','w') 
count_record=file_read.read() 
while count_record : 
    s=count_record.replace('<Field name="ExeDb"type="java.lang.String"><![CDATA[S]]></Field>','<Field name="ExeDb" type="java.lang.String"><![CDATA[W]]></Field>') 
    file_write.write(s) 
    t=count_record.replace('<Field name="Txt" type="java.lang.String"><![CDATA[','<Field name="Txt" type="java.lang.String"><![CDATA[TRIM(') 
    file_write.write(t) 
    count_record=file_read.read() 
    print s 
file_read.close() 
file_write.close() 

正如你可以看到,當我嘗試讀取線做我得到的最終文件兩行。

1)我想同時使用replace命令但只有單個文件。

2)也有任何方式來讀取和寫入單個文件,我不知道爲什麼r +不能正常工作。

3)I還要修改的線

t=count_record.replace('<Field name="Txt" type="java.lang.String"><![CDATA[','<Field name="Txt" type="java.lang.String"><![CDATA[TRIM(') 

到出頭像

t=count_record.replace('<Field name="Txt" type="java.lang.String"><![CDATA[','<Field name="Txt" type="java.lang.String"><![CDATA[TRIM($$$) ') 

其中$$$表示的詞或字符存在於源文件。

簡短添加)末尾的括號,不論括號後面有多少個單詞或字符。

非常感謝您的幫助。

回答

3

這在很多層面上都是錯誤的 - 您不能同時讀取和寫入同一個文件,file.read()命令讀取整個內容,並且每次替換後都不必保存。像這樣的東西:

file = open('myfile', 'r+') 
contents = file.read() 
file.seek(0) # rewind  
file.write(contents.replace('something', 'else').replace('and this too', 'replaced')) 

評論代碼是亂碼,包括這裏...你需要用正則表達式替換。請參閱模塊「再」的描述,基本上你需要的東西是這樣的:

import re 
contents = re.sub(
    '<Field name="Txt" type="java.lang.String"><!\[CDATA\[TRIM\(([^)]*)\]\]></Field>', 
    '<Field name="Txt" type="java.lang.String"><![CDATA[TRIM(\1)]]></Field>', 
    contents 
) 
+0

非常感謝執黑執白 我有我剛纔所說的,我有一個字符串,我需要找到另一個問題,即 <字段名稱= 「Txt」type =「java.lang.String」><![CDATA [TRIM(***]]> 這裏在上面這個搜索字符串***表示任意數量的字符長度不等, 我希望在此未知字符後添加一個近括號 因此最後我的字符串應該是 kdev 2009-12-07 16:45:38

+0

在答案中添加了正則表達式代碼。 – kibitzer 2009-12-07 19:43:04