在python脚本中拥有漂亮的打印选项

时间:2012-12-22 17:29:19

标签: python string pretty-print

我正在输出非常庞大的XML结构到文件,我希望用户能够启用/禁用漂亮的打印。

我正在使用大约150MB的数据,当我尝试xml.etree.ElementTree并从它的元素对象构建树结构时,它使用了大量的内存,所以我通过存储原始字符串并通过{输出来手动执行此操作{1}}。我的输出序列如下所示:

.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

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

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

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不起作用的建议?
或者,如果有更好的方法,我会接受任何建议

1 个答案:

答案 0 :(得分:5)

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

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

另请注意,对于大量字符串,Python支持带有三引号的多行字符串,这样可以更容易地键入,并且%的旧样式字符串格式已被{{1 - 你可能想在新代码中使用它。