0

次のようなテキスト ファイルがあり、新しいテキスト ファイルを作成しようとしています。括弧付きの各文字列には番号があります。この数値を解析する方法について助けが必要です。

test.txt

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

output.txt ファイルは次のように作成されます。

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()
4

2 に答える 2

3

正規表現を使えば簡単です:

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

これは、(オプションの)空白に一致し、その後に括弧で囲まれた数字が続き、簡単に置換できるように数字がグループに入れられます。

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))
于 2012-09-06T19:58:07.507 に答える
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()

入力が正しい場合。「手動で」解析する代わりに、REGEXP の使用を検討することもできます。

于 2012-09-06T19:59:14.850 に答える