Python 打印对象的漂亮打印表示的头部(前几行)
我正在Jupyter笔记本中运行Python 2.7。我正在使用大型嵌套字典,有时打印其中一个会很有帮助 使用pprint.pprint是在屏幕上获得dict可读版本的好方法。但对于特别大的字典来说,这可能意味着要打印一百万行,这会导致笔记本崩溃(我想我的浏览器无法处理) 在bash终端上,我习惯于将东西放入Python 打印对象的漂亮打印表示的头部(前几行),python,jupyter-notebook,pprint,Python,Jupyter Notebook,Pprint,我正在Jupyter笔记本中运行Python 2.7。我正在使用大型嵌套字典,有时打印其中一个会很有帮助 使用pprint.pprint是在屏幕上获得dict可读版本的好方法。但对于特别大的字典来说,这可能意味着要打印一百万行,这会导致笔记本崩溃(我想我的浏览器无法处理) 在bash终端上,我习惯于将东西放入|head,但在python中似乎没有一种通用的方法 我写了这个方法: from pprint import pformat, pprint def pprint_head(to_print
|head
,但在python中似乎没有一种通用的方法
我写了这个方法:
from pprint import pformat, pprint
def pprint_head(to_print,length=10)
formatted=pformat(to_print).splitlines()
pprint(formatted[:min(len(formatted),length)])
它是有效的,但我想知道
- 对于大的物体,速度相当慢
- 它对大对象使用大量内存
- 它被打印为一个字符串列表,因此它在开始处有[并在每行周围加引号
我还想知道是否有“Jupyter”解决方案(即告诉Jupyter只接受任何打印的前x行?要获得与外壳中的头管道相同的结果,您可以轻松地在Python中设置输出过滤器,因为
pprint
只使用其流的write
方法。它可以是:
class Head(object):
def __init__(self, lines, fd=sys.stdout):
self.lines = lines
self.fd = fd
def write(self, msg):
if self.lines <= 0: return
n = msg.count('\n')
if n < self.lines:
self.lines -= n
return self.fd.write(msg)
ix = 0
while(self.lines > 0):
iy = msg.find('\n', ix + 1)
self.lines -= 1
ix = iy
return self.fd.write(msg[:ix])
def pprint_head(to_print,length=10):
pprint(to_print, stream=Head(length))