原本在 python2 的時候,lxml 要序列化,只要呼叫 tostring,但到 python 3 就會出問題
原本在 python2 的時候,lxml 要序列化,只要呼叫 tostring,就可以交給檔案物件寫進檔案,像是這樣:
f = open('test.xml', 'w')
f.write(etree.tostring(root))
換到在 python3 的時候,就會發生:
f.write(etree.tostring(root))
TypeError: write() argument must be str, not bytes
原因是 lxml 回傳的是 python3 的新型態 bytes,其實就是以前的 str 型態。
要解決有兩個方法。
一個是 tostring 成 unicode,像這樣
f = open('test.xml', 'w')
f.write(etree.tostring(root))
另一個方法是
f = open('test.xml', 'wb')
f.write(etree.tostring(root))
以我們有中文需求的話,我比較喜歡第一種。