2017-11-09 1 views
1

나는 워드 파일 처리를 위해 파이썬 docx를 사용하고있다. 큰 파일 (50+ 페이지)을 사용하는 동안 paragraph.text 메서드는 내 파일과 일치하지 않는 문자열을 반환합니다.파이썬 docx 단락 메서드는 비정상적인 출력을주고있다

import docx 
document=Document(f) 
paratext=[] 
paragraphs=document.paragraphs 
for paragraph in paragraphs: 
    text=paragraph.text 
    paratext.append(text) 
print(paratext[30]) 

이상적으로 이것은 제 30 단락을 인쇄해야합니다. 그러나 출력이 왜곡 된 것처럼 보입니다. (일부 문자가 빠지기 시작하고 경우에 따라 실제 단락의 중간에서 인쇄 된 출력이 시작됩니다.) 그러나 신선한 ms 단어 문서 (1 페이지 만)에서 인접한 몇 단락을 복사하고 paratext의 색인을 변경하여 코드를 실행하면 정상적으로 작동합니다. 예를 들어, 새로운 doc에 3 개의 인접한 paras를 복사하고 print(paratext[2])을 사용하면 출력이 여기에서 완벽하게 보입니다. 더 큰 문서 작업을해야하는 이유는 무엇입니까?

답변

0

아마도 이것은 누락 된 텍스트가 필드 또는 하이퍼 링크와 같은 다른 XML 요소에 "동봉 된"실행에 있음을 의미합니다.

무엇이 일어나는지 구체적으로 발견하는 가장 빠른 방법은 짧은 스크립트를 수정하여 단락 XML을 임시로 캡처하는 것입니다. 그 시점에서

import docx 
document = Document(f) 
p_xml = [paragraph._element.xml for paragraph in document.paragraphs] 
print(p_xml[30]) 

당신의 선택은 잘못된 "케이스"를 제거하거나 lxml 호출을 사용하여 각 단락 자신을 위해 XML을 처리하는 Word 문서를 편집 할 가능성이 높다.

paragraph._element에서 사용할 수있는 .xpath() 방법을 사용하면 소리가 더 쉬울 수도 있습니다. 어쨌든 위의 방법으로 찾은 XML을 보여주는 별도의 질문이 될 것입니다.