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如果行尾有一个,这将删除\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 回答