打印一个对象的漂亮打印表示的头部(前几行)
Print the head (first few lines) of a pretty-print representation of an object
我是 运行 Python Jupyter 笔记本中的 2.7。我正在使用大型嵌套词典,有时打印出其中一本很有帮助。
使用 pprint.pprint 是在屏幕上获得可读版本的字典的好方法。但是对于特别大的词典,这可能意味着打印一百万行,这会使笔记本崩溃(我想我的浏览器无法处理它)。
在 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)])
有效,但我想知道
- 有better/morecanonical/built-in/'pythonic'的方法吗?
- 这些小问题可以改进吗? (按优先顺序):
- 大对象很慢。
- 大对象占用大量内存。
- 它被打印为字符串列表,因此它的开头有 [,每行都有引号。
我也想知道是否有 "Jupyter" 解决方案(即告诉 Jupyter 只接受任何打印的前 x 行?)
要获得与 shell 中的总管相同的结果,您可以在 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])
然后您可以使用它仅打印对象的前 n 行:
def pprint_head(to_print,length=10):
pprint(to_print, stream=Head(length))
我是 运行 Python Jupyter 笔记本中的 2.7。我正在使用大型嵌套词典,有时打印出其中一本很有帮助。
使用 pprint.pprint 是在屏幕上获得可读版本的字典的好方法。但是对于特别大的词典,这可能意味着打印一百万行,这会使笔记本崩溃(我想我的浏览器无法处理它)。
在 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)])
有效,但我想知道
- 有better/morecanonical/built-in/'pythonic'的方法吗?
- 这些小问题可以改进吗? (按优先顺序):
- 大对象很慢。
- 大对象占用大量内存。
- 它被打印为字符串列表,因此它的开头有 [,每行都有引号。
我也想知道是否有 "Jupyter" 解决方案(即告诉 Jupyter 只接受任何打印的前 x 行?)
要获得与 shell 中的总管相同的结果,您可以在 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])
然后您可以使用它仅打印对象的前 n 行:
def pprint_head(to_print,length=10):
pprint(to_print, stream=Head(length))