我有一个文本文件如下,我正在尝试创建一个新的文本文件。每个字符串上都有一个带括号的数字。我需要一些关于如何解析这个数字的帮助。
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()
答案 0 :(得分:3)
使用正则表达式很容易:
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 :(得分: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而不是“手动”解析它。