IPython - 打印默认打印头和打印头关于长变量的尾巴

时间:2014-04-04 16:32:49

标签: python numpy pandas ipython

(仅适用于IPython,无论是终端还是QTConsole,而不是Notebook)有没有办法让常规的打印语句(是的,2.7)自动打印变量的头部和尾部(甚至只是头部)它超过一些任意大小?

如果我在大熊猫数据框架上print dataframe太大,pandas会自动打印头部。我也喜欢它在列表和numpy数组上的工作方式,所以下次我不小心打印出一个巨大的阵列时,我不会忘记100页的数字。 (我确信我可以编写一个功能来执行此操作,但我反复使用打印,所以我想知道是否有方法可以控制IPython将显示多少 - 实际上,我' d而是改变控制台显示的内容而不是程序正在做什么。)

1 个答案:

答案 0 :(得分:1)

您对print语句的帮助真的很大,但您可以对ipython的输出做些什么,请考虑以下命令:

In [13]: x = range(3)

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

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

首先,xOut[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的代表足够大,您将被删除{ {1}}或类似的寻呼机,您可以在其中一次查看此文本表示。

P.S。 less可通过" traits进行扩展,"它对我来说仍然是魔法,但也许你可以使用特征来解决第一种情况。