2

我有几个 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('{') 给了我第一次出现 { 的索引,但我需要将其余代码向下推并在每个文件中插入我的公共成员。

4

2 回答 2

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没有。
于 2013-03-01T11:34:00.097 回答
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)
于 2013-03-01T16:56:41.163 回答