-1

我正在向文件输出相当大的 XML 结构,我希望用户能够启用/禁用漂亮的打印。

我正在处理大约 150MB 的数据,当我尝试xml.etree.ElementTree从它的元素对象构建树结构时,它使用了非常多的内存,所以我通过存储原始字符串并通过.write(). 我的输出序列如下所示:

ofile.write(pretty_print(u'\
\t\t<LexicalEntry id="%s">\n\
\t\t\t<feat att="languageCode" val="cz"/>\n\
\t\t\t<Lemma>\n\
\t\t\t\t<FormRepresentation>\n\
\t\t\t\t\t<feat att="writtenForm" val="%s"/>\n\
\t\t\t\t</FormRepresentation>\n\
\t\t\t</Lemma>\n\
\t\t\t<Sense>%s\n' % (str(lex_id), word['word'], '' if word['pos']=='' else '\n\t\t\t\t<feat att="partOfSpeech" val="%s"/>' % word['pos'])))

.write()我调用我的函数pretty_print 中,根据命令行选项,应该删除所有制表符和换行符

o_parser = OptionParser()
# ....
o_parser.add_option("-p", "--prettyprint", action="store_true", dest="pprint", default=False)
# ....

def pretty_print(string):
    if not options.pprint:
        return string.strip('\n\t')
    return string

我写了“应该”,因为它没有,在这种特殊情况下,它不会删除任何字符。

但在这种情况下,它工作正常:

for ss in word['synsets']:
    ofile.write(pretty_print(u'\t\t\t\t<Sense synset="%s-synset"/>\n' % ss))

我想到的第一件事是替换可能存在一些问题,但是当我在pretty_print 函数内打印传递的字符串时,它看起来非常好。

有什么建议可能导致.strip()不起作用?
或者如果有更好的方法可以做到这一点,我会接受任何建议

4

1 回答 1

5

您的问题是str.strip()仅从字符串的开头和结尾删除。

如果要从行的开头和结尾删除它们,您要么想要str.replace()删除所有实例,要么将其拆分为行并剥离每一行。

另请注意,对于您的大量字符串,Python 支持带有三引号的多行字符串,这将使其更容易输入,并且旧样式的字符串格式%已被取代str.format()- 您可能希望在新代码中使用它.

于 2012-12-22T17:30:55.227 回答