我有几个java代码文件,我必须在每个代码中添加一个公共类级变量。我需要编写一个python 2.2脚本才能执行相同的文件。
package xx.xx.xx;
import java.util.Properties;
public class MyClass extends YourClass{
public myMethod() throws MyException {
}
}
预期产出
package xx.xx.xx;
import java.util.Properties;
public class MyClass extends YourClass{
public static final String CO_ID = "XXXXX"
public myMethod() throws MyMException {
}
}
我知道file.find('{')给我第一次出现的索引{但我需要按下代码的其余部分并在每个文件中插入我的公共成员。
答案 0 :(得分:5)
Python有一个方便的工具:fileinput模块:
import fileinput
import sys
import re
newline = '''\
{l}
public static final String CO_ID = "XXXXX"
'''
filename = '/path/to/file.java'
for line in fileinput.input([filename], inplace=True, backup='.bak'):
if re.match(r'public class', line):
sys.stdout.write(newline.format(l=line))
else:
sys.stdout.write(line)
inplace=True,
改变文件“就地”。实际上是一个临时文件
已创建,然后移至原始位置。backup='.bak'
告诉fileinput.input
创建备份
原始文件。sys.stdout.write
代替print
,因为print
添加了sys.stdout.write
{{1}}没有额外的新行。答案 1 :(得分:1)
Ubuntu的代码有效但我已经修改了Python 2.2 Python 2.2兼容代码
import fileinput
import sys
import re
newline = '''\
%s
public static final String CO_ID = "XXXXX"
'''
filename = '/path/to/file.java'
for line in fileinput.input([filename], inplace=True, backup='.bak'):
if re.match(r'public class', line):
sys.stdout.write(newline%line)
else:
sys.stdout.write(line)