かなり巨大な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
「should」と書いたのは、そうではないためです。この特定のケースでは、どの文字も削除されません。
ただし、この場合は正常に機能します。
for ss in word['synsets']:
ofile.write(pretty_print(u'\t\t\t\t<Sense synset="%s-synset"/>\n' % ss))
最初に頭に浮かんだのは、置換に問題があるかもしれないということでしたが、pretty_print
関数内に渡された文字列を出力すると、完全に正常に見えます。
それが機能しない原因となる可能性のある提案はあり.strip()
ますか?
または、これを行うためのより良い方法があれば、私はアドバイスを受け入れます