我正在尝试浏览一个句子文件,并在这些句子中逐行取出大写字母。
这是我正在处理的数据文件:
the dog_SUBJ bit_VERB the cat_OBJ
the man_SUBJ ran_VERB
the cat_SUBJ ate_VERB the cheese_OBJ
本质上,我希望程序为每行输出'SUBJ', 'VERB'和'OBJ'。但是,对于我现在正在处理的脚本的每一行,输出的是文件中每行的所有大写字母,而不仅仅是该行中的大写字母。
下面是我现在得到的输出:
Line 0: the dog_SUBJ bit_VERB the cat_OBJ
['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ']
第一行:the man_SUBJ ran_VERB
['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ']
第二行:the cat_SUBJ ate_VERB the cheese_OBJ
['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ']
例如,我希望程序为第0行输出'SUBJ', 'VERB', 'OBJ',即该行中的内容。
下面是我正在使用的脚本:
import re, sys
f = open('findallEX.txt', 'r')
lines = f.readlines()
ii=0
for l in lines:
sys.stdout.write('line %s: %s' %(ii, l))
ii = ii + 1
results = []
for i in lines:
results += re.findall(r'[A-Z]+', i)
谢谢!
在没有明显原因的情况下迭代了行列表两次。试试这个:
import re
with open('findallEX.txt', 'r') as f:
for ii, line in enumerate(f):
print 'line %s: %s' % (ii, line)
results = re.findall(r'[A-Z]+', line)
print results
(我也做了一些更python化的东西;您应该使用上下文管理器打开文件(使用with
),并且应该避免手动控制循环变量。
无regex:
from itertools import chain, groupby
with open('text.txt') as f:
print [''.join(g) for k, g in
groupby(chain.from_iterable(f), key=str.isupper) if k]
['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ']