1
입력 :구문 분석 발전기 파이썬 2
@example1
abcd
efg
hijklmnopq
@example2
123456789
스크립트 :
def parser_function(f):
name = ''
body = ''
for line in f:
if len(line) >= 1:
if line[0] == '@':
name = line
continue
body = body + line
yield name,''.join(body)
for line in parser_function(data_file):
print line
출력
('@example1', 'abcd')
('@example1', 'abcdefg')
('@example1', 'abcdefghijklmnopq')
('@example2', 'abcdefghijklmnopq123456789')
원하는 출력 :
('@example1', 'abcdefghijklmnopq')
('@example2', '123456789')
내 홍보 oblem, 내 발전기는 모든 라인을 굴복하고 있지만 라인을 재설정 해야할지는 잘 모르겠습니다. 원하는 출력을 얻는 데 문제가 있으며 몇 가지 방법을 시도했습니다. 어떤 도움이라도 대단히 감사하겠습니다. "if name :"을 가진 다른 발전기를 보았지만 상당히 복잡했습니다. 나는 그 코드를 사용하여 작업 할 수있어하지만 난 당신이 어디를 yield
변경해야
변수 이름으로'str'을 사용하지 말 것을 지적 할 가치가 있습니다. –
@PadraicCunningham : 좋은 지적입니다. 답변에 추가하겠습니다. 감사. – NPE
"if line and line [0] == '@'"나는 라인 [0]을 이해하지만 "if line"은 항상 참이 아니겠습니까? –