私は_python-docx
_モジュール(_pip install python-docx
_)を使用しようとしていますが、 github repo テストサンプルがopendocx
関数を使用しているように非常に混乱しているようです readthedocs では、Document
クラスを使用しています。既存のものを読み取らずにdocxファイルにテキストを追加する方法だけを示していますか?
1つ目(opendocx
)は機能していません。廃止される可能性があります。 2番目のケースでは、私が使用しようとしていた:
_from docx import Document
document = Document('test_doc.docx')
print document.paragraphs
_
_<docx.text.Paragraph object at 0x... >
_のリストを返しました
それから私はやった:
_for p in document.paragraphs:
print p.text
_
すべてのテキストを返しましたが、不足しているものはほとんどありませんでした。すべてのURL(Ctrlキーを押しながらクリックしてURLに移動)がコンソール上のテキストに存在しませんでした。
問題は何ですか?なぜURLがないのですか?
ループを繰り返し処理せずに完全なテキストを取得するにはどうすればよいですか(open().read()
など)
これを試すことができます
import docx
def getText(filename):
doc = docx.Document(filename)
fullText = []
for para in doc.paragraphs:
fullText.append(para.text)
return '\n'.join(fullText)
python-docx2txt を使用できます。これはpython-docxから変更されていますが、リンク、ヘッダー、フッターからテキストを抽出することもできます。画像を抽出することもできます。
インストールなしpython-docx
docx
は基本的に、いくつかのフォルダーとファイルが含まれるZipファイルです。以下のリンクで、docx
ファイルからテキストを抽出する簡単な関数を見つけることができます。インストールする必要はありませんpython-docx
とlxml
は時々問題を引き起こします:
http://etienned.github.io/posts/extract-text-from-Word-docx-simply/
Python-docxには2つの「世代」があります。初期世代は0.2.xバージョンで終了し、「新しい」世代はv0.3.0で開始しました。新世代は、従来のバージョンをオブジェクト指向で一から書き直したものです。 ここにある明確なリポジトリ があります。
Opendocx()関数は、レガシーAPIの一部です。ドキュメントは新しいバージョン用です。レガシーバージョンには、言及すべきドキュメントがありません。
現在のバージョンでは、ハイパーリンクの読み取りも書き込みもサポートされていません。その機能はロードマップ上にあり、プロジェクトは積極的に開発中です。 Wordには非常に多くの機能があるため、非常に広範なAPIであることがわかりました。だから我々はそれに到達しますが、誰かがその側面に焦点を合わせて貢献することを決定しない限り、おそらく来月にはそうではありません。
あなたもこれを試すことができます
from docx import Document
document = Document('demo.docx')
for para in document.paragraphs:
print(para.text)
@Chinmoy Pandaの答えが示すように、python-docxを使用します。
for para in doc.paragraphs:
fullText.append(para.text)
ただし、para.text
はw:smarttag
のテキストを失います(対応するgithubの問題はこちら: https://github.com/python-openxml/python-docx/issues/328 )、代わりに次の関数を使用する必要があります。
def para2text(p):
rs = p._element.xpath('.//w:t')
return u" ".join([r.text for r in rs])
他の答えはpython-docx
、これは.docx
pythonのinbuild open
関数を含むファイル:
data = open(file, 'r', encoding="ISO-8859-1").read()
引数にencoding = "ISO-8859-1"を指定する必要があります。それが役に立てば幸い。
同様の問題が発生したため、回避策を見つけました(正規表現のおかげでハイパーリンクタグを削除して、段落タグのみが残るようにしました)。このソリューションを https://github.com/python-openxml/python-docx/issues/85 BPに投稿しました