2016-03-06 122 views
-1

我目前正试图以生成一组在一个文本文件中的以下语法指定车型:Python的字符串替换文件

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的零个OCCURENCES = 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;”到“= currentValue;”
  4. 保存到BMx_currentValue_Token.txt
  5. CurrentValue的++
  6. 如果CurrentValue的< = 999,转到步骤与步骤1 2
  7. 重复在文件列表中的下一个文件
  8. 如果fileList.next == NULL - >我们're done

因此,结果将是目录中每个文件的999个变体。 任何想法,我会如何用Python做到这一点?

回答

0

对于没有1,请解释什么是fileList。我猜这是一个文件名(?)的列表。

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

对于数字4,5,6和7,您可以使用for循环与range。请记住,在蟒蛇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() 

我不知道这是否是你想要什么,但它应该给你一个好的开始。

+0

谢谢!这帮了我很多,比我试过的东西简单得多。只是为了清除它:fileList确实是我从目录列表中检索到的文件列表。 – DCH