Python字符串替换文件

时间:2016-03-06 15:54:07

标签: python regex

我目前正在尝试使用以下语法生成一组在文本文件中指定的模型:

pn [BM1_100_Token]

constants:

places:
    P0 = 1;
    P1 = 0;
    [...]
    P14 = 2;
    P15 = 0;
    P16 = 0;
    P17 = 0;
    [...]

transitions:
    T0 :  : [P0 - 1] & [P1 + 1];
    T1 :  : [P1 - 1] & [P2 + 1] & [P3 + 1];
[...]

我想要修改的Px = 2可能没有出现: 我想将所有出现的值更改为值Y,然后以新名称保存文件:BMz_Y_Token.txt

我认为这可以通过Python和正则表达式相当简单,但我现在有点困难,因为这是我第一次使用python的真实体验。

我的正则表达式如下:

regex = re.compile(" = 2;")

我也可以从目录中获取文件列表并拆分文件名所以我得到了几个不同的部分:

fileParts[1] = BMx
fileParts[2] = Y
fileParts[3] = Token.txt

所以我现在需要做的是:

  1. 打开fileList
  2. 中的第一个文件
  3. 替换所有出现的“= 2;” to“= currentValue;”
  4. 保存至BMx_currentValue_Token.txt
  5. CurrentValue的++
  6. 如果currentValue< = 999,请转到步骤2
  7. 从步骤1开始,对fileList
  8. 中的下一个文件重复上述步骤
  9. 如果fileList.next == null - >我们已经完成了
  10. 因此,对于目录中的每个文件,结果将是999个变体。 关于如何用Python做这个的任何想法?

1 个答案:

答案 0 :(得分:0)

如果没有1,请解释什么是fileList。我猜它是一个文件名列表(?)。

对于2号,您不需要正则表达式。只需使用字符串方法.replace(' = 2;',' = currentValue;')

对于数字4,5,6和7,您可以使用for循环和range。请记住,在python range(1000)中将产生0到999之间的整数。

所以你写的(我假设是python2):

currentValue = 0
inpFileName = fileList[0]  # ?
for currentValue in range(1000):
  inpFile = open( inpFileName, 'r' )
  outFile = open( 'BMx_%d_Token.txt' % currentValue, 'w' )
  for inpLine in inpFile:
    outLine = inpLine.replace( ' = 2;', ' = %d;' % currentValue )
    outFile.write( outLine )
  inpFile.close()
  outFile.close()

我不知道这是不是你想要的,但它应该给你一个良好的开端。