使用Python在文件中插入文本

时间:2013-03-01 11:23:04

标签: python file-io

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

2 个答案:

答案 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)
相关问题