Tuesday 31 January 2017

Python Open Stdout As Binary Optionen

7. Eingabe und Ausgabe Es gibt verschiedene Möglichkeiten, die Ausgabe eines Programms anzuzeigen. Die Daten können in einer von Menschen lesbaren Form gedruckt oder in eine Datei geschrieben werden. In diesem Kapitel werden einige der Möglichkeiten erörtert. 7.1. Fancier-Ausgabeformatierung Bisher haben wir zwei Möglichkeiten, Werte zu schreiben: expression statements und print-Anweisung. (Ein dritter Weg ist die Methode write () von Datei-Objekten, die Standard-Ausgabedatei kann als sys. stdout referenziert werden. Weitere Informationen hierzu finden Sie in der Bibliotheksreferenz.) Häufig wollen Sie mehr Kontrolle über die Formatierung Ihrer Ausgabe als einfach Druckraum-getrennte Werte. Es gibt zwei Möglichkeiten, um Ihre Ausgabe zu formatieren der erste Weg ist, um alle String Behandlung selbst mit String Slicing und Verkettung Operationen können Sie jedes Layout, das Sie sich vorstellen können. Die String-Typen haben einige Methoden, die nützliche Operationen für das Auffüllen von Strings zu einer gegebenen Spaltenbreite durchführen, die in Kürze besprochen werden. Der zweite Weg ist, die str. format () Methode zu verwenden. Das String-Modul enthält eine Template-Klasse, die eine weitere Möglichkeit zum Ersetzen von Werten in Strings bietet. Eine Frage bleibt natürlich, wie Sie Werte in Strings konvertieren. Zum Glück hat Python Möglichkeiten, einen beliebigen Wert in einen String zu konvertieren: Übergeben Sie ihn an die repr () - oder str () - Funktionen. Die str () - Funktion soll Repräsentationen von Werten wiedergeben, die relativ lesbar sind, während repr () dazu dient, Darstellungen zu erzeugen, die vom Interpreter gelesen werden können (oder SyntaxError erzwingen wird, wenn keine entsprechende Syntax existiert). Für Objekte, die eine besondere Darstellung für den menschlichen Verzehr haben, gibt str () denselben Wert wie repr () zurück. Viele Werte, wie z. B. Zahlen oder Strukturen wie Listen und Wörterbücher, haben dieselbe Darstellung mit beiden Funktionen. Insbesondere Strings und Gleitkommazahlen haben zwei unterschiedliche Darstellungen. Hier gibt es zwei Möglichkeiten, eine Tabelle von Quadraten und Cubes zu schreiben: (Beachten Sie, dass im ersten Beispiel ein Leerzeichen zwischen den einzelnen Spalten durch die Art und Weise, in der print funktioniert, hinzugefügt wurde: Es fügt immer Leerzeichen zwischen seinen Argumenten hinzu.) Dieses Beispiel demonstriert das str. rjust () - Methode von string-Objekten, die eine Zeichenfolge in einem Feld einer gegebenen Breite rechtsbündig macht, indem sie mit Leerzeichen links gefüllt wird. Es gibt ähnliche Methoden str. ljust () und str. center (). Diese Methoden schreiben nichts, sie geben nur eine neue Zeichenfolge zurück. Wenn der eingegebene String zu lang ist, don8217t es abschneiden, aber es unverändert zurückgeben wird dies Ihre Säulen-Layout-out, aber that8217s in der Regel besser als die Alternative, die um einen Wert liegen würde. (Wenn Sie wirklich wollen, dass Trunkierung können Sie immer eine Slice-Operation, wie in x. ljust (n): n.) Es gibt eine andere Methode, str. zfill (). Die eine numerische Zeichenfolge auf der linken Seite mit Nullen pads. Es versteht über Plus - und Minuszeichen: Grundlegende Verwendung der str. format () - Methode sieht so aus: Die Klammern und Zeichen in ihnen (Formatfelder) werden durch die in die str. format () - Methode übergebenen Objekte ersetzt. Eine Zahl in den Klammern bezieht sich auf die Position des Objekts, das in die str. format () - Methode übergeben wird. Wenn Schlüsselwortargumente in der str. format () - Methode verwendet werden, werden deren Werte mit dem Namen des Arguments bezeichnet. Positions - und Schlüsselwortargumente können beliebig kombiniert werden: 7.2. Lesen und Schreiben von Dateien open () gibt ein Datei-Objekt zurück und wird am häufigsten mit zwei Argumenten verwendet: open (Dateiname, Modus). Das erste Argument ist ein String mit dem Dateinamen. Das zweite Argument ist eine Zeichenfolge, die einige Zeichen enthält, die beschreiben, wie die Datei verwendet wird. - Modus kann r sein, wenn die Datei nur gelesen wird, w für nur Schreiben (eine bestehende Datei mit dem gleichen Namen wird gelöscht), und ein öffnet die Datei für das Anhängen von Daten in die Datei geschrieben wird automatisch an das Ende hinzugefügt. R öffnet die Datei zum Lesen und Schreiben. Das Argument mode ist optional r wird angenommen, wenn it8217s weggelassen wird. Auf Windows, b angefügt, um den Modus öffnet die Datei im Binär-Modus, so gibt es auch Modi wie rb. Wb Und rb. Python unter Windows unterscheidet zwischen Text - und Binärdateien die Zeilenendezeichen in Textdateien werden beim Lesen oder Schreiben automatisch geändert. Diese Hinter-der-Szenen-Änderung an Datei-Daten ist für ASCII-Textdateien gut, aber es8217ll korrupte binäre Daten wie in JPEG - oder EXE-Dateien. Seien Sie sehr vorsichtig, um den Binärmodus beim Lesen und Schreiben solcher Dateien zu verwenden. Unter Unix tut es nicht weh, ein b an den Modus anzuhängen, so dass Sie es plattformunabhängig für alle Binärdateien verwenden können. 7.2.1. Methoden der Dateiobjekte Der Rest der Beispiele in diesem Abschnitt wird davon ausgehen, dass ein Dateiobjekt mit dem Namen f bereits erstellt wurde. Um einen file8217s-Inhalt zu lesen, rufen Sie f. read (size) auf. Die einige Datenmengen liest und als String zurückgibt. Size ist ein optionales numerisches Argument. Wenn Größe weggelassen oder negativ ist, wird der gesamte Inhalt der Datei gelesen und zurückgegeben it8217s Ihr Problem, wenn die Datei doppelt so groß wie Ihr machine8217s Speicher ist. Andernfalls werden höchstens die Bytes gelesen und zurückgegeben. Wenn das Ende der Datei erreicht ist, gibt f. read () einen leeren String (quotquot) zurück. F. readline () liest eine einzelne Zeile aus der Datei ein Zeilenumbruchzeichen (n) wird am Ende des Strings links und wird nur in der letzten Zeile der Datei weggelassen, wenn die Datei doesn8217t in einer Zeilenumbrüche enden. Dies macht den Rückgabewert eindeutig, wenn f. readline () einen leeren String zurückgibt, das Ende der Datei erreicht ist, während eine leere Zeile durch n dargestellt wird. Eine Zeichenfolge, die nur eine einzige Zeile enthält. Für das Lesen von Zeilen aus einer Datei können Sie über das Dateiobjekt Schleife. Dies ist Speicher effizient, schnell und führt zu einfachen Code: Wenn Sie alle Zeilen einer Datei in einer Liste lesen möchten, können Sie auch Liste (f) oder f. readlines (). F. write (string) schreibt den Inhalt der Zeichenfolge in die Datei und gibt None zurück. Um etwas anderes als einen String zu schreiben, muss es zuerst in einen String konvertiert werden: f. tell () gibt eine Ganzzahl zurück, die der Datei object8217 die aktuelle Position in der Datei angibt, gemessen in Byte vom Anfang der Datei. Um die Position der Datei object8217s zu ändern, verwenden Sie f. seek (offset, fromwhat). Die Position wird aus dem Hinzufügen eines Versatzes zu einem Bezugspunkt berechnet, wobei der Referenzpunkt durch das Argument aus dem Argument ausgewählt wird. A von einem Wert von 0 Maßen ab dem Anfang der Datei verwendet 1 die aktuelle Dateiposition und 2 das Ende der Datei als Referenzpunkt. Von was kann weggelassen werden und standardmäßig auf 0, mit dem Anfang der Datei als Referenzpunkt. Wenn Sie mit einer Datei fertig sind, rufen Sie f. close () auf, um sie zu schließen und alle Systemressourcen freizugeben, die von der geöffneten Datei aufgenommen wurden. Nach Aufruf von f. close (). Werden Versuche, das Dateiobjekt zu verwenden, automatisch fehlschlagen. Es ist gut, das Schlüsselwort mit dem Schlüsselwort zu verwenden, wenn es sich um Dateiobjekte handelt. Dies hat den Vorteil, dass die Datei nach Beenden der Suite ordnungsgemäß geschlossen wird, auch wenn eine Ausnahme unterwegs auftritt. Es ist auch viel kürzer als das Schreiben äquivalenter try-finally-Blöcke: File-Objekte haben einige zusätzliche Methoden, wie isatty () und truncate (), die weniger häufig verwendet werden, konsultieren Sie die Library Reference für eine vollständige Anleitung für Datei-Objekte. 7.2.2. Das Speichern von strukturierten Daten mit json Strings kann einfach geschrieben und aus einer Datei gelesen werden. Zahlen nehmen etwas mehr Aufwand, da die read () Methode nur Strings zurückgibt, die an eine Funktion wie int () übergeben werden müssen. Der einen String wie 123 annimmt und seinen numerischen Wert 123 zurückgibt. Wenn Sie komplexere Datentypen wie verschachtelte Listen und Wörterbücher speichern möchten, wird das Analysieren und Serialisieren von Hand kompliziert. Anstatt die Benutzer ständig schreiben und Debugging-Code, um komplizierte Datentypen in Dateien zu speichern, können Sie mit Python das beliebte Datenaustauschformat JSON (JavaScript Object Notation) verwenden. Das Standardmodul namens json kann Python-Datenhierarchien verwenden und diese in Zeichenfolgedarstellungen umwandeln, wird dieser Prozess als Serialisierung bezeichnet. Die Rekonstruktion der Daten aus der Zeichenfolgendarstellung wird als Deserialisierung bezeichnet. Zwischen Serialisierung und Deserialisierung kann der String, der das Objekt repräsentiert, in einer Datei oder Daten gespeichert sein oder über eine Netzwerkverbindung zu einer entfernten Maschine gesendet werden. Das JSON-Format wird häufig von modernen Anwendungen verwendet, um den Datenaustausch zu ermöglichen. Viele Programmierer sind bereits mit ihm vertraut, was es eine gute Wahl für die Interoperabilität macht. Wenn Sie ein Objekt x haben. Können Sie die JSON-Zeichenfolgendarstellung mit einer einfachen Codezeile anzeigen: Eine weitere Variante der dumps () - Funktion, dump (). Einfach das Objekt in eine Datei serialisiert. Wenn also f ein Dateiobjekt ist, das zum Schreiben geöffnet ist, können wir dies tun: Um das Objekt erneut zu decodieren, wenn f ein Dateiobjekt ist, das zum Lesen geöffnet wurde: Diese einfache Serialisierungstechnik kann Listen und Wörterbücher verarbeiten, aber beliebige Klasseninstanzen serialisieren In JSON erfordert ein wenig Aufwand. Die Referenz für das json-Modul enthält eine Erläuterung dazu. Pickle - das Pickle-Modul Im Gegensatz zu JSON. Pickle ist ein Protokoll, das die Serialisierung von beliebig komplexen Python-Objekten ermöglicht. Daher ist es spezifisch für Python und kann nicht für die Kommunikation mit Anwendungen verwendet werden, die in anderen Sprachen geschrieben wurden. Es ist auch unsicher standardmäßig: Deserialisierung Pickle-Daten aus einer nicht vertrauenswürdigen Quelle kann beliebigen Code ausführen, wenn die Daten von einem qualifizierten Angreifer erstellt wurde. Ist es eine entkoppelte Methode der Übergabe in einer binären Datei ohne Leiden der Strafe von python mit ungepufferten stdout Für die gesamte Laufzeit eines Programms (wenn ich beabsichtige, nur cmdline verwenden und nicht öffnen (. Rb) Es scheint wie - u ist die einzige Möglichkeit, in einer Datei als binäre Daten (von cmdline) - u Force stdin, stdout zu lesen Und stderr, um völlig ungepuffert werden. Auf Systeme, auf die es ankommt, auch stdin, stdout und stderr im Binär-Modus. Jedoch aus irgendeinem Grund hat python - u (ungepufferte Ausgabe, die die Dinge sehr langsam macht) Auch steuern, ob eine Datei im Operator wie test. py lt myfile als binäre Eingabe behandelt wird. I lief in ein Problem, in dem ich dieses Eingabeformat für eine Klasse und in den Prozess der Analyse der Datei verwenden musste, würde es Lesen Sie das Äquivalent von 39ctrlz39 und töten Sie die Anwendung. so meine Hoffnung war, dass there39s eine Möglichkeit, eine Datei als binäre in behandeln, wo telling python, um ungepufferte Ausgabe haben ndash pyInTheSky Sie könnten vielleicht vermeiden, Pythons-Datei-Modus von Stattdessen grabbing die fileno aus dem sys. stdin-Datei-ähnliches Objekt und mit os. read (), um Daten von ihm zu greifen Dieser Code wird Standard-Eingang (nur) in ungepufferten Modus zu ändern. Mit diesem müssen Sie den Interpreter nicht mit - u aufrufen. Nur Unix. Allerdings bin ich nicht sicher, welche Nebenwirkungen dies haben könnte, zum Beispiel auf die rawinput eingebaute Funktion. Seien Sie vorsichtig, auch im non-blocking-Modus, wenn select sagt Ihnen die fd bereit ist zu lesen, müssen Sie noch OSError fangen und auf e. errno os. errno. EAGAIN überprüfen. Solche Fehler sollten ignoriert werden.


1 comment:

  1. Nachdem ich die Hochschule abgeschlossen hatte, gab es keinen Job, also beschloss ich, ein kleines Unternehmen zu führen, aber es gab kein ausreichendes Geld, ich schließe das Geschäft, die Dinge wurden sehr hart für mich, ich war das einzige Kind meiner Eltern und meiner Eltern sind beide alt, sie sind für die tägliche Fütterung auf mich angewiesen , wie sich diese NEUE PROGRAMMIERTE BLANK ATM CARD in einen Geldautomaten hacken und viel Geld abheben kann, also kontaktierte ich die Firma über ihre E-Mail, zu meiner größten Überraschung bekam ich nach einigen Tagen die Karte, nachdem ich nur eine geringe Gebühr für die Karte bezahlt hatte. Diese leere Geldautomatenkarte ist in der Tat ein großartiges, wunderbares Produkt, ich hätte nie geglaubt, dass ich all diese Dinge, die ich heute habe, erwerben könnte, mit dieser großen Freude in meinem Herzen, deshalb teile ich die gute Nachricht mit ... Das Leben besteht darin, positiv und geduldig zu sein, daran zu glauben, dass große Dinge möglich sind passieren innerhalb weniger Sekunden...BRAIN HACKERS TECH WORLD hat mein Leben verändert...Gott sei Dank, für sie email, VIA ( brainhackers@aol.com )

    ReplyDelete