我有漂亮的打印模塊,我準備,因爲我不高興的pprint模塊生產的數字有一個列表的列表數億列表。這裏是我的模塊的使用示例。如何將漂亮的打印模塊擴展到表格?
>>> a=range(10)
>>> a.insert(5,[range(i) for i in range(10)])
>>> a
[0, 1, 2, 3, 4, [[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7, 8]], 5, 6, 7, 8, 9]
>>> import pretty
>>> pretty.ppr(a,indent=6)
[0, 1, 2, 3, 4,
[
[],
[0],
[0, 1],
[0, 1, 2],
[0, 1, 2, 3],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5, 6],
[0, 1, 2, 3, 4, 5, 6, 7],
[0, 1, 2, 3, 4, 5, 6, 7, 8]], 5, 6, 7, 8, 9]
代碼是這樣的:
""" pretty.py prettyprint module version alpha 0.2
mypr: pretty string function
ppr: print of the pretty string
ONLY list and tuple prettying implemented!
"""
def mypr(w, i = 0, indent = 2, nl = '\n') :
""" w = datastructure, i = indent level, indent = step size for indention """
startend = {list : '[]', tuple : '()'}
if type(w) in (list, tuple) :
start, end = startend[type(w)]
pr = [mypr(j, i + indent, indent, nl) for j in w]
return nl + ' ' * i + start + ', '.join(pr) + end
else : return repr(w)
def ppr(w, i = 0, indent = 2, nl = '\n') :
""" see mypr, this is only print of mypr with same parameters """
print mypr(w, i, indent, nl)
這裏是我的漂亮的打印模塊中的一個固定的文本,表格印刷:
## let's do it "manually"
width = len(str(10+10))
widthformat = '%'+str(width)+'i'
for i in range(10):
for j in range(10):
print widthformat % (i+j),
print
你有更好的選擇,對於要推廣這個代碼足夠漂亮的打印模塊?
我張貼的問題後發現,對於這種常規情況下這是什麼模塊:prettytable A simple Python library for easily displaying tabular data in a visually appealing ASCII table format
你的問題有點「爲什麼會做什麼,我就告訴給做?」。答案是,你對它應該爲你做什麼的期望與它所做的不符。 – msw 2010-07-23 15:32:25
我希望發電機應該爲解釋器產生有用的結果。圖標語言給出了很好的答案。圖標語言不符合我對解釋性使用的期望,而這種解釋性使用大部分都是Python填充的。期望和懶惰是發展的源泉:) – 2010-07-23 15:40:32
發電機不能被打印,因爲它們不能被重繞(按照定義)。所以,你的期望是沒有意義的,要高興他們沒有滿足:p你用'0 .. n'表示的意思是Python中的xrange(0,n)',它們有一個非常合理的表示。 – 2010-07-23 15:44:48