2013-04-17 3 views
0

Я использовал readlines, чтобы разбить все предложения в файле, и я хочу использовать re.findall, чтобы пройти и найти капители внутри них. Тем не менее, единственным выходом, который я могу получить, является один набор капиталов для всех предложений, но я хочу набор капиталов для каждого предложения в файле.Использование re.findall в python, выводящий один набор параметров, а не набор параметров для каждой строки

Я использую цикл for, чтобы попробовать это на данный момент, но я не уверен, что это лучший способ действий с этой задачей.

Вход:

Line 01: HE went to the SHOP 
Line 02: THE SHOP HE went 

Это то, что я получаю в качестве выхода:

[HE, SHOP, THE] 

, и я хочу, чтобы получить выход:

[HE, SHOP], [THE, SHOP, HE] 

Есть ли способ делать это? Я поместил свою кодировку в следующую минуту. Благодаря!

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 

for x in l 
    re.findall('[A-Z]+', l) 
print x 
+0

Это не может быть ваш точный код. Ваш последний цикл for итерации повторяется по одной строке (последней из предыдущего цикла for-loop) по одному символу за раз. * Ничего * не печатается или не назначается в этом цикле. Затем вы печатаете один символ. Другими словами, этот код не может выдавать вывод, который вы говорите: '[HE, SHOP, THE]'. Измените свой вопрос, чтобы показать более типичный пример вашего фактического кода. –

ответ

2

Я думаю, что способ сделать это состоит в следующем:

txt = """HE went to the SHOP 
THE SHOP HE went""" 

result = [] 
for s in txt.split('\n'): 
    result += [re.findall(r'[A-Z]+', s)] 

print(result) # prints [['HE', 'SHOP'], ['THE', 'SHOP', 'HE']] 

Или используя списковых (чуть менее читаемым):

txt = """HE went to the SHOP 
    THE SHOP HE went""" 

print([re.findall(r'[A-Z]+', s) for s in txt.split('\n')]) 
+0

Стиль nit: имя вашего символа цикла 'i' - плохая идея, если оно не представляет собой целое число. Здесь я бы посоветовал использовать 's' или' line'. –

+0

'txt.splitlines()' –

0

Если данные действительно в том, что form (слова полностью заглавные), вам даже не нужны регулярные выражения. isupper - это все, что вам нужно.

with open('findallEX.txt') as f: 
    for line in f.readlines(): 
     print [word for word in line.split() if word.isupper()] 

Добавлен пример.