在Jython中替换多行

时间:2009-12-05 23:50:17

标签: python string replace 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)我也想修改一行

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($$$) ')

其中$$$表示源文件中存在的单词或字符。

简而言之)最后用括号括起来,无论开放括号后的单词或字符数是多少。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分: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
)