2016-06-30 4 views
2

私はワードドキュメントを検索して、ドキュメントに書かれていることの説明を取得しています。ただし、これらのドキュメントはすべて同じフォーマットではありません。しかし、一貫しているのは、私が望むテキストブロックが常にタイトルの「説明」の後にあることです。だから、私は 'Description'を検索して、それの後の次の段落オブジェクトのテキストを取得したいと考えています。どのように段落オブジェクトを増やして(話すように)?python-docxを使ってword文書の段落オブジェクトを増やす方法は?

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     doc = docx.Document(os.path.join(rootdir, file)) 
     for paragraph in doc.paragraphs: 
      if 'Description' in paragraph.text: 
       print(paragraph[i+1].text) #I know you can't do i+1 but 
              #that's essentially what I want to do 

答えて

2

単純なアプローチは次のようになります。

paragraphs = list(doc.paragraphs) 

for i in range(len(paragraphs)): 
    paragraph = paragraphs[i] 
    if 'Description' in paragraph.text: 
     print(paragraphs[i+1].text) 

あなたが記述ラベルがHeading 1スタイルを持つ段落に表示されていることを確かに知っている場合は、上の偽陽性を得ることはありませんので、あなたはさらに段落を見出し資格ができその単語を使用するだけの段落。

+0

ああ、段落オブジェクトがインデックス作成をサポートしていないということは、この行で 'print(paragraph [i + 1] .text)'と言います。 @scanny – Vince

+0

申し訳ありません@Vince、それは 'print(paragraphs [i + 1] .text)'でなければなりません。私はこの例でそれを修正しました。 Paragraphオブジェクトはインデックス付きアクセスをサポートしていません。これはコレクションではないため意味があります。しかし、Document.paragraphsから返された値はすでにリストになっています。これはもちろんインデックス作成をサポートしているため、最初の行を 'paragraphs = doc.paragraphs'に単純化することができます。 – scanny

+0

Paragraph.nextのような何らかの振る舞いについて言及している場合は、それ自体に対するインデックス付きアクセスをサポートする段落のように、そうでない場合、その機能は存在しません。 – scanny

1

テキストを抽出してその方法で検索する場合は、python-docx2txtが頭痛を軽減します。それはpython-docxから適応されました。

関連する問題