2

Windows 7 で Python 2.7.3 (x64) と lxml 2.3.6 を使用していることを前置きします。

誰かが助けてくれることを望んでいる、少し奇妙な問題があります。オンラインで解決策が見つかりません。おそらく正しいものを探していません。

とにかく、プログラムで lxml を使用して XML を作成し、これをテキスト ファイルに出力するという問題があります。問題は、lxml が改行をテキストに変換していることです
。ほとんど urlencoding のようですが、HTML は使用していません。 m XML を使用します。

たとえば、次のような単純なテキスト ファイルをメモ帳で作成したとします。

This
is
my
text

次に、いくつかの xml を作成し、このテキストを xml に追加します。

from lxml import etree

textstr = ""
fh = open("mytext.txt", "rb")
for line in fh:
    textstr += line

root = etree.Element("root")
a = etree.SubElement(root, "some_element")
a.text = textstr

print etree.tostring(root)

ここでの問題は、印刷の出力が次のようになることです。

<root><some_element>This&#13;
is&#13;
my&#13;
text</some_element></root>

私の目的では、改行は問題ありませんが、&#13;要素はそうではありません。

私が把握できたのは、テキスト ファイルをバイナリ モードで開いているために発生していることです"rb"(これは、アプリが大きなテキスト ファイルのインデックスを作成しているため、実際に行う必要があります)。ファイルをバイナリ モード"r"で開かないと、出力に含まれません&#13;(もちろん、インデックス作成は機能しません)。

また、次のように変更してみましetree.tostringた:

print etree.tostring(root, method="xml")

ただし、出力に違いはありません。

これで、xml テキストを文字列にダンプしてアーティファクトを置き換えることが$#13;できますが、より洗練されたソリューションを望んでいました。解析するテキスト ファイルが自分の管理下になく、私の知らないうちに、テキスト ファイルが URL スタイルのエンコーディングに変換されている可能性があります。

このエンコーディングが起こらないようにする方法を知っている人はいますか?

4

1 に答える 1

0

Windows は\r\n行末を表すために使用しますが、Unix は を使用し\nます。これ\rにより、行末に があれば削除されます (したがって、コードは UNIX テキスト ファイルでも機能します)。削除されるのは最大で 1 つ\rなので\r、行のどこかに があれば保持されます。 .

import re
textstr = ""
with open("mytext.txt", "rb") as fh:
    for line in fh:
        textstr += re.sub(r'\r$', '', line)
print(repr(textstr))
于 2013-03-21T14:30:24.383 に答える