2012-09-06 44 views
0

我有一個如下的文本文件,並且正在嘗試創建一個新的文本文件。每個字符串上都有一個括號。我需要一些關於如何解析這個數字的幫助。如何從行中解析數字

itemA-1 
itemA-2 
itemA-3 
itemB (test) abcd-1 
itemB (test) abcd-2 
itemC xyx-1 
itemC xyx-2 
itemC xyx-3 

我當前的代碼:

import os 
f = open('C:\\Dropbox\\test.txt','r') 
data = f.read() 
print (data) 
f.close() 
+1

要格式化代碼爲stackoverflow,只需將其粘貼在逐字,並按下'Ctrl' +'K'。謝謝! – phihag

回答

3

很容易的用正則表達式:

要爲創建

的test.txt

itemA (3)  
itemB (test) abcd (2)  
itemC xyx (3) 

output.txt的文件

r'\s*\((\d+)\)' 

那將匹配(可選)的空白,隨後在parethesis的數字,更換放入一個組中,方便數:

parensnumber = re.compile(r'\s*\((\d+)\)') 

count = int(parensnumber.search(line).group(1)) 
for i in range(count): 
    print(parensnumber.sub('-{0}'.format(i + 1), line)) 

演示:

>>> import re 
>>> parensnumber = re.compile(r'\s*\((\d+)\)') 
>>> parensnumber.sub(r'-\1', 'itemA (3)') 
'itemA-3' 
>>> parensnumber.sub(r'-\1', 'itemB (test) abcd (2)') 
'itemB (test) abcd-2' 
>>> line = 'itemB (test) abcd (2)' 
>>> count = int(parensnumber.search(line).group(1)) 
>>> for i in range(count): 
...  print(parensnumber.sub('-{0}'.format(i + 1), line)) 
... 
itemB (test) abcd-1 
itemB (test) abcd-2 

完整代碼爲您具體的例子:

import os 
import re 

parensnumber = re.compile(r'\s*\((\d+)\)') 

with open('C:\\Dropbox\\test.txt','r') as input: 
    for line in input: 
     count = int(parensnumber.search(line).group(1)) 
     for i in range(count): 
      print(parensnumber.sub('-{0}'.format(i + 1), line)) 
1

試試這個:

o = open('output.txt', 'w') 
for line in open('text.txt'): 
    vals = line.split(' ') 
    n = int(vals[-1][1:-1]) 
    for i in range(n): 
     o.write("%s-%d" % (" ".join(vals[:-1]), i)) 
o.close() 

只要你的INPUT是正確的。儘管您可能想要考慮使用REGEXP,而不是「手動」解析它。