2017-12-08 22 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文内に、私が探しているテーブルがあります。

メッセージは、テストif activeTable...text == 'some text'は、テーブルのいずれにも成功していないようですね

答えて

0

「プロセスが終了コード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

これは問題ではありません。すべてのテーブルのactiveTableコード: if activeTable.cell(0,0).paragraphs [0] .text == 'some text': indexOfTableToDelete = allTables.index(activeTable) print( "削除するテーブル:" 、1 + indexOfTableToDelete) del allTables [indexOfTableToDelete] – Bartli

+0

申し訳ありません。私のコメントは、それが終わる前に送られました。すべてのテーブルの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) 

感謝。

関連する問題