2009-10-21 5 views
1

난 후 추구하고 고통이기 때문에, 그것을 가지고 싶어 내가 고통 그 자체를 사랑 아무도 없다

페이지 같은 것을 포함하는 .txt 인 파일이 과제를 수행해야 ...파이썬으로 텍스트 파일을 파싱 하시겠습니까?

이 나는이 텍스트 파일을 구문 분석하고 생성 파이썬 코드와 XHTML 파일을 작성한다고 가정하고

처럼이 텍스트 파일이 모습의 또 다른 예입니다
H1
나는를 찾을 필요 이 프로젝트의 출발점은 내가 Python을 처음 접했기 때문이다. 이 물건에 대해 많이 알지 못합니다.
이 파이썬 코드는이 텍스트 파일에서이 "태그"를 가져 와서 xhtml 파일에 넣는 것으로 가정합니다.
도움을 주시면 대단히 감사하겠습니다.
미리 감사드립니다.
-bojan

+1

입력 파일의 형식이 다소 모호합니다. 이것은 SO에서 표시되는 방식 일 수 있지만 ...이 "p", "h1"표시는 별도의 줄에 있거나, 적용되는 섹션 바로 앞에 있거나 HTML과 유사한 태그 여기에 괄호와 닫는 태그가 없어 졌거나 생략 되었습니까? – mjv

답변

1

직접 작성한 텍스트 파일에서 XHTML 파일로 이동하는 대신 먼저 중간 메모리 내 표현으로 변환합니다.

ph1 태그를 나타내는 클래스를 작성한 다음 텍스트 파일을 통해 해당 객체를 빌드하고 목록 (또는 더 복잡한 객체이지만 파일의 모양 목록이 충분해야 함). 그런 다음 목록을 ph1 객체를 반복하여 XHTML로 출력하는 다른 함수로 전달합니다.

추가 보너스로 각 태그 객체 (예 : ParagraphHeading1 클래스)가 as_xhtml() 메소드를 구현하고 실제 형식을 해당 메소드에 위임하게했습니다. 당신은 파이썬에 아주 익숙하지 말

for tag in input_tags: 
    xhtml_file.write(tag.as_xhtml()) 
9

, 그래서 매우 낮은 수준에서 시작합니다 : 그런 다음 XHTML 출력 루프는 같은 것을 할 수 있습니다. 파이썬에서 파일을 매우 간단하게 반복 할 수 있습니다.

fyle = open("contents.txt") 
for lyne in fyle : 
    # Do string processing here 
fyle.close() 

이제 구문 분석 방법을 설명합니다. 각 형식 지정 문 (예 : p, h1)이 별도의 줄에 있으면 쉽게 확인할 수 있습니다. 나는 핸들러의 사전을 구축하고 얻을 핸들러를 너무 싶습니다

handlers= {"p": # p tag handler 
      "h1": # h1 tag handler 
      } 

# ... in the loop 
    if lyne.rstrip() in handlers : # strip to remove trailing whitespace 
     # close current handler? 
     # start new handler? 
    else : 
     # pass string to current handler 

당신은 무엇을 Daniel Pryden suggested을 할 수 먼저 메모리 내 데이터 구조를 만든 다음 XHTML 것을 직렬화. 이 경우 처리기는 각 태그에 해당하는 객체를 작성하는 방법을 알고 있습니다. 그러나 나는 더 간단한 해결책, 특히 많은 시간이 없다면 XHTML로 곧장 가서 현재 묶인 태그의 스택을 유지하는 것만으로도 충분하다고 생각한다. 이 경우 "핸들러"는 출력 파일/문자열에 태그를 쓰는 간단한 논리 일 수 있습니다.

문제의 세부 사항을 모른 채 더 이상 말할 수 없습니다. 게다가, 나는 너를 위해 모든 숙제를하고 싶지 않아. 이것은 당신에게 좋은 시작을 제공해야합니다.

+2

+1 좋은 답변입니다.필자는'fyle.close()'를 호출하는 지점을 만들 겠지만 (또는 더 좋게는'with open ("contents.txt")를 fyle :') 사용하십시오. 들어가기 좋은 습관입니다. 가비지 컬렉터로 하여금 열린 파일을 처리하도록 할 수는 있지만, 그렇게해서는 안됩니다. –

+0

맞아, 필자가 제안한대로'fyle.close()'를 추가했다. 'with ... as'가 더 좋지만, 초보자를 이해하는 것이 더 쉽습니다. – AFoglia

+0

....... nyce 대답. –