2016-03-06 73 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