2017-12-08 15 views
0

왼쪽 위 셀의 내용을 기반으로 문서에서 일부 테이블을 제거하고 싶습니다.python docx 문서에서 테이블 삭제

allTables = document.tables 
for activeTable in allTables: 
    if activeTable.cell(0,0).paragraphs[0].text == 'some text': 
     allTables.remove(activeTable) 

내가 셀 (0,0)에서 '텍스트'를 포함하는 모든 테이블을 제거 것으로 예상하지만,이 문서에 여전히 :

나는 시도했다.

프로세스가 예상대로 "allTables.remove (activeTable)"행을 입력합니다. indexToDelete = allTables.index(activeTable) if 문 내에 내가 원하는 테이블이 있습니다.

메시지는

답변

0

그것은 테이블 중 어떤 성공되지 테스트 if activeTable...text == 'some text' 같은 소리 "종료 코드 0으로 종료 프로세스"입니다. 이 경우 .remove() 호출은 실행되지 않지만 스크립트는 여전히 종료 코드 0 (성공)을 반환합니다.

for table in document.tables: 
    print("'%s'" % table.cell(0, 0).paragraphs[0].text) 

과 단락 텍스트는 당신이 생각하는 것입니다 확인 : 테스트, 어쩌면 같은 유효성을 검사하여

시작. 당신이 결정, 당신은 전체 문자열이 아닌 다른 뭔가를 테스트 할 수 있음을 갖게되면 아마 .startswith()를 사용

'some text but also some other text' 
... 

:이 같은 뭔가를 인쇄해야합니다 당신은 일단

text = table.cell(0, 0).paragraphs[0].text 
if text.startswith('some text'): 
    print('found one') 

당신 작업 다음 문제로 이동할 수 있습니다.

+0

이것은 문제가되지 않습니다. allTables의 activeTable 코드 : if activeTable.cell (0,0) .paragraphs [0] .text == 'some text': indexOfTableToDelete = allTables.index (activeTable) print ("삭제할 테이블 :" , 1+ indexOfTableToDelete) del allTables [indexOfTableToDelete] ' – Bartli

+0

죄송합니다. 끝나기 전에 내 의견을 보냈습니다. allTables의 activeTable 코드 : if activeTable.cell (0,0) .paragraphs [0] .text == 'some text': indexOfTableToDelete = allTables.index (activeTable) print ("삭제할 테이블 :" , 1+ indexOfTableToDelete) del allTables [indexOfTableToDelete] 'prints : 삭제할 테이블 : 3 삭제할 테이블 : 8 삭제할 테이블 : 10 이것들은 내가 찾고있는 테이블입니다. – Bartli

+0

아, 알겠습니다. 나는 지금 무슨 일이 일어나고 있는지보고있다. 'document.tables'가 반환하는 목록 ('allTables')에서 테이블을 제거하고 있지만 기본 XML에서 테이블을 제거하지는 않습니다. 대신'activeTable._element.getparent(). remove (activeTable._element)'를 시도하십시오. – scanny

0

솔루션은 다음과 같습니다 scanny에

allTables = document.tables 

for activeTable in allTables: 
    if activeTable.cell(0,0).paragraphs[0].text == 'some text': 
     activeTable._element.getparent().remove(activeTable._element) 

감사합니다.