2012-05-08 79 views
2

Ahoy StackOverlow-ers!Python:如何將大文本輸出格式化爲'漂亮'和用戶定義

我有一個相當微不足道的問題,但這是我在這裏或在線教程中無法找到的其他問題:我們如何能夠格式化Python程序的輸出以使其適合某些美學格式沒有任何額外的模塊?

這裏的目的是,我有一個類似於報紙文章的純文本塊,並且我已經通過它提前篩選,以提取我想要的單詞,但現在我想要將它打印出來格式,每行只有70個字符,如果它通常應該在換行符上,任何單詞都不會被破壞。

在stdout.write(article.ljust(70))中使用.ljust(70)似乎沒有做任何事情。

約沒有打破的話會因爲其他的事情:

Latest news tragic m 

urder innocent victi 

ms family quiet neig 

hbourhood 

Looking more like this: 

Latest news tragic 

murder innocent 

victims family 

quiet neighbourhood 

謝謝所有好心提前!

+0

我覺得這是這個副本: HTTP ://stackoverflow.com/questions/250357/smart-truncate-in-python – jgritty

+1

此外,對於報紙和排版,請參閱:http://en.wikipedia.org/wiki/Kerning – jgritty

+0

沒關係,textwrap看起來像一個很合適。 – jgritty

回答

8

結帳的python textwrap module(標準模塊)

>>> import textwrap 
>>> t="""Latest news tragic murder innocent victims family quiet neighbourhood""" 
>>> print "\n".join(textwrap.wrap(t, width=20)) 
Latest news tragic 
murder innocent 
victims family quiet 
neighbourhood 
>>> 
+0

感謝您的回答!它工作的一種享受,但我想知道如果沒有textwrap模塊也可以做類似的事情嗎?我希望它可能需要更多的努力,但不是嗎? – user1359892

+0

爲什麼你不使用textwrap? – Marcin

+0

如果你想爲這個特定的情況編寫你自己的代碼,我認爲這也很好。它應該不難。它將只使用標準的python函數。 –

0

我敢肯定,這可以改善上。沒有任何庫:

def wrap_text(text, wrap_column=80): 
    sentence = '' 
    for word in text.split(' '): 
     if len(sentence + word) <= 70: 
      sentence += ' ' + word 
     else: 
      print sentence 
      sentence = word 
    print sentence 

編輯:從如果你想使用正則表達式只挑選出來的話用這個註釋:

import re 

def wrap_text(text, wrap_column=80): 
    sentence = '' 
    for word in re.findall(r'\w+', text): 
     if len(sentence + word) <= 70: 
      sentence += ' ' + word 
     else: 
      print sentence 
      sentence = word 
    print sentence 
+0

謝謝,Satyajit!我將不得不放棄這一點。它看起來就像我想象的那樣。而不是word.split(),你認爲使用正則表達式可能會改進我在哪裏以及如何分割它會好嗎? – user1359892

+0

是的。如果你只想要的話,而不是標點符號(這個答案)[http://stackoverflow.com/a/1059596/504262]會有所幫助。使用''re.findall(r'\ w +',text)''。 – satran

+0

如果您發現此答案正確,請您接受它。 – satran