2014-04-04 150 views
4

(僅在IPython中工作,無論是終端還是QTConsole,而不是Notebook)是否有辦法使常規打印語句(是,2.7)自動打印頭和尾巴(甚至只是頭部)的變量,如果它超過一些任意大小?IPython - 打印默認打印頭變量和尾變量的長變量

如果我對print dataframe的熊貓數據框太大,熊貓自動打印頭。我希望它能夠在列表和numpy數組上工作,這樣下次我意外地打印出一個巨大的數組時,我不會收到100頁的數字。 (我確信我可以寫一個函數來做到這一點,但我反思地使用print,所以我想知道是否有辦法控制IPython會顯示多少 - 實際上,我寧願更改控制檯顯示的內容,而不是什麼程序做)

+1

我同意列表/字典,但我認爲numpy數組會自動限制打印的數量。 (如果你意識到你不小心鍵入了'print longList'並且數據屏幕閃爍着,你通常可以通過ctrl-c來實現) – Noah

+1

這是'__str__'方法的一個基本的東西。每個班級的一部分(而不是集中),也就是說,我不認爲*這將在一般情況下成爲可能......但很高興學習,否則! –

+4

如果數組有超過1000個元素,則打印一個NumPy數組會產生摘要。這可以使用['numpy.set_printoptions']進行配置(http://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html)。 – user2357112

回答

1

你真的不能做與print語句,但你可以做一些事情ipython的輸出,認爲這些命令:

In [13]: x = range(3) 

In [14]: x 
Out[14]: [0, 1, 2] 

In [15]: print x 
[0, 1, 2] 

首先,x分配Out[14]到表達式的值,然後顯示Out[14]

你可以破解ipython以不同的方式顯示它。據我所知,ipython使用pprint內部或其副本。只是猴子補丁pprint.pprint/pprint.pformat/pprint.PrettyPrinter不起作用。你需要破解ipython。

其次,print x直奔Python的核心。在python 2.x中,你不能改變print的功能。在Python 3.x print()只是一個功能,你可以猴子補丁。

如果你打印的是你自己的類的對象,隨時重新定義__str____repr__像NumPy這樣做:

numpy.set_printoptions(threshold=2) 
numpy.array(range(10)).__str__() 
'[0 1 2 ..., 7 8 9]' 
print numpy.array(range(10)) 
[0 1 2 ..., 7 8 9] 

最後,ipython自帶%page魔法命令,你可以發出%page x如果表現x是足夠大的,你會被放到less或類似的尋呼機,你可以一次查看這個文本表示一頁。

P.S. ipython可以通過「特質」擴展,但它對我來說仍然是魔術,但也許你可以使用特質來解決第一種情況。

+0

謝謝。看起來我不能完全按照自己的意願去做,但這是一個非常有用的解釋,說明什麼是可能的,以及IPython在與標準Python控制檯不同的表面之下做什麼。 – schodge