2012-12-22 38 views
-1

我輸出非常巨大的XML結構到文件,我希望用戶能夠啓用/禁用漂亮打印。在Python腳本中擁有漂亮的打印選項

我正在處理大約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()不起作用?
或者如果有更好的方法來做到這一點,我會接受任何建議

回答

5

您的問題是str.strip()只從字符串的開頭和結尾刪除。

要麼你想str.replace()刪除所有情況下,或將其拆分成線和鋼帶的每一行,如果你想從一開始就和線條的末端將其刪除。

另請注意,您的大規模串,Python支持三重引號,這將使人們更方便輸入了多行字符串,和舊風格的字符串與%格式已被str.format()取代 - 這你可能想在新的代碼中使用。