Python 打印对象的漂亮打印表示的头部(前几行)

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

我正在Jupyter笔记本中运行Python 2.7。我正在使用大型嵌套字典,有时打印其中一个会很有帮助

使用pprint.pprint是在屏幕上获得dict可读版本的好方法。但对于特别大的字典来说,这可能意味着要打印一百万行,这会导致笔记本崩溃(我想我的浏览器无法处理)

在bash终端上,我习惯于将东西放入
|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)])
它是有效的,但我想知道

  • 有更好的/更规范的/内置的/pythonic的方法吗
  • 这些小毛病有什么可以改进的吗?(按优先顺序):
    • 对于大的物体,速度相当慢
    • 它对大对象使用大量内存
    • 它被打印为一个字符串列表,因此它在开始处有[并在每行周围加引号

  • 我还想知道是否有“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))