2015-07-17 7 views
7

Gibt es eine Möglichkeit, pprint in python3 nicht zu split Strings auf \s zu sagen? Wenn Sie eine lange Zeichenfolge in pprint von python3 senden, sucht es nach \s und split. python2 pprint hat dies nicht getan. Kann dieses Verhalten deaktiviert werden? Ich schaute durch die Quelle nach pprint und es sieht nicht so aus, als gäbe es eine Option, die ich dafür sah.Kann ich in Python3 nicht geteilte Strings wie in python2 pprint machen?

Kann ich es irgendwie austricksen?

Hier ist ein Beispiel dafür, was ich bekomme:

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

Und hier ist, was ich will:

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

Um zu klären, ich will es Breiten gehorchen, nur nicht für Streicher. Also, wenn ich zum Beispiel sehen:

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

Ich möchte:

['ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ ZZZZZZZZZZZZZ', 
'CATS'] 

Nicht:

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

Antwort

9

Sie haben soeben die width Option auf einen wirklich großen Wert gesetzt könnte, wie sys.maxsize:

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

Einstellung width zu -1 hat keine besondere Bedeutung.

Die einzige andere Möglichkeit ist es, die PrettyPrinter() Klasse, Unterklasse, und das Einwickeln der _format() Methode:

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) 

Hier wird die Breite sys.maxsize nur für Strings:

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

Ich habe das versucht. Dann teilt es zB sehr lange Wörterbücher nicht auf. Was ich will, ist es, basierend auf Breite für alles außer Strings zu teilen - bitte lassen Sie diese in Ruhe und gehen Sie bei Bedarf über. – Carbon

+0

@ProbablyAStupidQuestion: Es gibt keine anderen Optionen für 'pprint'. –

+0

Nüsse. Danke trotzdem. Vielleicht werde ich es abzweigen. – Carbon

1

Es scheint, dass Sie brauchen um die Breite auf die Länge des Strings + 3 (für die Anführungszeichen auf jeder Seite und den Zeilenumbruch) auf ein absolutes Minimum zu setzen.

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