2017-08-20 7 views
1

ユニコード文字をdocxファイルに書き込む方法はありますか?私はpython-docxを試しましたが、それは私にTypeErrorを与えています。ユニコードを.docxファイルに書き込む

トレースバック

Traceback (most recent call last):

File "< ipython-input-1-ba89c735995d >", line 1, in runfile('H:/Python/Practice/new/download.py', wdir='H:/Python/Practice/new')

File "C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile execfile(filename, namespace)

File "C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile exec(compile(f.read(), filename, 'exec'), namespace)

File "H:/Python/Practice/new/download.py", line 37, in document.add_paragraph(story.encode("utf-8"))

File "C:\Program Files\Anaconda3\lib\site-packages\docx\document.py", line 63, in add_paragraph return self._body.add_paragraph(text, style)

File "C:\Program Files\Anaconda3\lib\site-packages\docx\blkcntnr.py", line 36, in add_paragraph paragraph.add_run(text)

File "C:\Program Files\Anaconda3\lib\site-packages\docx\text\paragraph.py", line 37, in add_run run.text = text

File "C:\Program Files\Anaconda3\lib\site-packages\docx\text\run.py", line 163, in text self._r.text = text

File "C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py", line 104, in text _RunContentAppender.append_to_run_from_text(self, text)

File "C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py", line 134, in append_to_run_from_text appender.add_text(text)

File "C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py", line 142, in add_text self.add_char(char)

File "C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py", line 156, in add_char elif char in '\r\n':

TypeError: 'in < string >' requires string as left operand, not int

私はウェブサイトをこすりし、MS Wordファイルにテキストを書き込むしようとしていました。テキストは現地語(Bangla)にあります。コンソールにstoryを印刷すると、テキスト全体が完全に印刷されます。

コードのPython 3では

import requests 
from docx import Document 
from bs4 import BeautifulSoup 

url = "some url" 
response = requests.get(url) 
soup = BeautifulSoup(response.text, "lxml") 

story = soup.find("div", {"dir": "ltr"}).get_text().replace("<br />", "\n", len(response.text)) 

title = "title" 
document = Document() 
document.add_heading(title, 0) 
document.add_paragraph(story.encode("utf-8")) 
document.save(title + ".docx") 
+0

私は完全なトレースバックを追加しました。 Btwは、URLから完全にデータを取得します。それをコンソールで印刷するとうまく動作します。 –

+0

'.encode( 'utf-8')'を呼び出さずに*試しましたか? – kennytm

+0

私は 'encode(" utf-8 ")を使わないと、いくつかのブロックからなる文書を私に渡します。 –

答えて

2

strイングスあなたはエンコーディングにUTF-8のような特別なことをする必要はありませんので、自動的に、Unicodeをサポートする(はずです)。

document.add_paragraph(story) 
#     ^just do this directly, no need to call `.encode('utf-8')` 

ドキュメントにUnicode文字を書くことができますが、ワードプロセッサで使用されるデフォルトのテキストのレンダリングエンジンがそれをサポートしない場合があります。文字が「□□□□」にならないように、specify a fontが必要な場合があります。

run = document.add_paragraph(story).add_run() 
font = run.font 
font.name = 'Vrinda' 
関連する問題