2015-07-17 12 views
7

Czy istnieje sposób, aby powiedzieć pprint w python3 nie na split ciągów znaków na \s? Jeśli wyślesz długi ciąg do python3's pprint, będzie on wyglądał na \s i podzielony. Python2: pprint nie zrobił tego. Czy to zachowanie może być wyłączone? Przejrzałem źródło pod kątem pprint i nie wygląda na to, że widziałem taką opcję.Czy mogę zrobić pprint w python3 nie rozszczepione ciągi, jak w python2?

Czy mogę go jakoś podstępem?

Oto przykład o co mi chodzi:

>>> PP.pprint("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ",width=-1,compact=True) 
('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ' 
'ZZZZZ') 

A oto, co chcę:

>>> PP.pprint("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ",width=-1,compact=True) 
('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ') 

celu wyjaśnienia, chcę go słuchać szerokości, po prostu nie do strun. Więc gdy widzę np

PP.pprint(["ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZZZZZZZ","CATS"]) 

chcę:

['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZZZZZZZ', 
'CATS'] 

Nie:

['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ' 
'ZZZZZZZZZZZZZ', 
'CATS'] 

Odpowiedz

9

Można po prostu ustawić opcję width do naprawdę dużej wartości, takich jak sys.maxsize:

>>> import sys 
>>> import pprint as PP 
>>> PP.pprint("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ",width=sys.maxsize,compact=True) 
'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ' 

Ustawienie width do nie ma specjalnego znaczenia.

Jedyną opcją jest do podklasy klasy PrettyPrinter() i owijania metody _format():

import sys 
from pprint import PrettyPrinter 

class NoStringWrappingPrettyPrinter(PrettyPrinter): 
    def _format(self, object, *args): 
     if isinstance(object, str): 
      width = self._width 
      self._width = sys.maxsize 
      try: 
       super()._format(object, *args) 
      finally: 
       self._width = width 
     else: 
      super()._format(object, *args) 

NoStringWrappingPrettyPrinter().pprint(yourobject) 

ten ustawia szerokość do sys.maxsize tylko dla strun: Wydaje

>>> NoStringWrappingPrettyPrinter().pprint(["ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ", "CATS"]) 
['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ', 
'CATS'] 
+2

Próbowałem tego. Wówczas nie rozdziela np. Bardzo długich słowników. To, czego chcę, to podzielić na podstawie szerokości dla wszystkiego poza ciągami - proszę zostawić je w spokoju i przejść w razie potrzeby. – Carbon

+0

@ProbablyAStupidQuestion: nie ma innych opcji dla 'pprint'. –

+0

orzechy. Dzięki i tak. Może to rozwiążę. – Carbon

1

że trzeba aby ustawić szerokość jako długość ciągu znaków + 3 (dla cudzysłowów po obu stronach i znaku nowej linii) w absolutnym minimum.

>>> x = 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ' 
>>> PP.pprint(x, width=len(x)) 
'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ' 
'ZZZZZ' 
>>> PP.pprint(x, width=len(x) + 3) 
'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZ' 
Powiązane problemy