2013-04-17 6 views
0

readlines을 사용하여 파일의 모든 문장을 분할했으며 re.findall을 사용하여 그들 안에있는 수도들. 그러나 내가 얻을 수있는 유일한 결과는 모든 문장에 대해 하나의 대문자 집합이지만 파일의 각 문장마다 대문자 집합이 필요합니다.python에서 re.findall을 사용하여 각 행에 대한 매개 변수 집합이 아닌 하나의 매개 변수 집합 출력

지금은 이것을 시도하기 위해 for 루프를 사용하고 있지만 이것이이 작업에 가장 적합한 것인지 확실하지 않습니다.

입력 :

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

이 내가 출력으로 받고 있어요 무엇 :

[HE, SHOP, THE] 

내가 출력 싶어 :

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

이 방법이 있나요 이러는거야? 나는 아래 분에 코딩을했다. 감사!

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

정확한 코드 일 수 없습니다. 마지막 for-loop는 한 번에 한 줄씩 반복됩니다 (이전 for 루프의 맨 마지막 줄). * 아무 것도 * 인쇄되거나 그 루프에 할당되지 않습니다. 그런 다음 한 문자를 인쇄합니다. 즉,이 코드는 여러분이 말하는 출력을 생성 할 수 없습니다 :'[HE, SHOP, THE]'. 질문을 편집하여 실제 코드에 대한 대표적인 예를 보여주십시오. –

답변

2

나는 다음과 같은 것을 할 수있는 방법이라고 생각 양식 (단어를 완전히 대문자로), 당신은 심지어 regexes 필요하지 않습니다. isupper 만 있으면됩니다.

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

예제를 추가했습니다.

+0

스타일 nit : 루프 문자 'i'의 이름을 지정하는 것이 정수가 아니라면 나쁜 생각입니다. 여기에's' 또는'line'을 사용하는 것이 좋습니다. –

+0

'txt.splitlines()' –

0

를 데이터가 정말 인 경우

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