2013-04-19 4 views
0

문장의 파일을 검토하고 그 문장 내에서 대문자를 한 줄씩 찾으려고합니다.한 줄씩 문장 파일을 나누고 findall을 사용하여 특정 매개 변수를 추출하십시오.

the dog_SUBJ bit_VERB the cat_OBJ 
the man_SUBJ ran_VERB 
the cat_SUBJ ate_VERB the cheese_OBJ 

는 기본적으로 내가 출력 '흔들림 감지', '동사'와 각 라인에 대한 'OBJ'에 프로그램을 원하는 : 여기

내가 작업하고있는 데이터 파일입니다. 그러나 지금 작업하고있는 스크립트가있는 각 줄마다 출력은 해당 줄의 대문자와 반대로 각 줄의 파일에있는 대문자 모두입니다.

줄 0 : the dog_SUBJ bit_VERB the cat_OBJ

['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ'] 

행 1 : the man_SUBJ ran_VERB

['SUBJ', 'VERB', 'OBJ', 'SUBJ', 'VERB', 'SUBJ', 'VERB', 'OBJ'] 

행 2 : 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) 

감사 : 여기

내가 순간에 작업을하고있는 스크립트입니다!

+0

각 줄마다 [[ '수','동사 ','OBJ '], [수발', '동사'], [ '수', '동사', 'OBJ']]? 그래서 여전히 모든 라인을 통과 할 수 있습니다. – user2290969

+0

왜 이것을 downvoted 했습니까? – jamylak

답변

2

명백한 이유로 선 목록을 두 번 반복하고 있습니다. (;) 당신이 with로 (파일을 열 컨텍스트 관리자를 사용해야하고, 수동으로 제어 루프 변수는 피해야한다 나는 또한했습니다 것들을 좀 더 파이썬.)

+0

예! 그게 효과 야! 고마워! – user2290969

0

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 

을이 시도 정규식없이 : 라인 0 : 다음 dog_SUBJ bit_VERB cat_OBJ,745이 출력을 제공

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']