Tuesday 27 December 2016

Valueerror Unbuffered Streams Must Be Binary Options

16.2. Io 8212 Kernwerkzeuge für die Arbeit mit Strömen 16.2.1. Überblick Das io-Modul bietet Python8217s Hauptfunktionen für den Umgang mit verschiedenen E / A-Typen. Es gibt drei Haupttypen von I / O: Text I / O. Binäre E / A und rohe I / O. Dies sind generische Kategorien, und verschiedene Backing Stores können für jede von ihnen verwendet werden. Ein konkretes Objekt, das zu einer dieser Kategorien gehört, wird als Dateiobjekt bezeichnet. Andere gängige Begriffe sind Stream und Datei-ähnliche Objekt. Unabhängig von seiner Kategorie, jedes konkrete Stream-Objekt wird auch verschiedene Fähigkeiten haben: es kann schreibgeschützt, schreibend oder read-write sein. Er kann auch willkürlichen Zufallszugriff (Suche nach vorne oder rückwärts an beliebiger Stelle) oder nur sequentiellen Zugriff (z. B. bei einer Steckdose oder Rohrleitung) erlauben. Alle Streams sind vorsichtig mit der Art der Daten, die Sie ihnen geben. Wenn beispielsweise ein str-Objekt an die write () - Methode eines binären Streams angelegt wird, wird ein TypeError erzeugt. So wird ein Byte-Objekt der write () - Methode eines Textstroms geben. Geändert in Version 3.3: Operationen, die verwendet wurden, um IOError zu erhöhen, erhöhen nun OSError. Da IOError jetzt ein Alias ​​von OSError ist. 16.2.1.1. Text I / O Text I / O erwartet und erzeugt Str-Objekte. Das bedeutet, dass immer dann, wenn der Backing-Store nativ aus Bytes besteht (wie im Fall einer Datei), die Codierung und Decodierung von Daten transparent gemacht wird, sowie optional die Übersetzung plattformspezifischer Zeilenumbrüche. Der einfachste Weg, um einen Text-Stream zu erstellen, ist mit open (). Optional spezifiziert eine Codierung: In-Memory-Textströme stehen auch als StringIO-Objekte zur Verfügung: Die Textstream-API ist in der Dokumentation von TextIOBase ausführlich beschrieben. 16.2.1.2. Binäre E / A-Binär-E / A (auch als gepufferte E / A bezeichnet) erwartet Bytes-ähnliche Objekte und erzeugt Byteobjekte. Es wird keine Kodierung, Dekodierung oder Newline-Translation durchgeführt. Diese Kategorie von Strömen kann für alle Arten von Nichttextdaten verwendet werden, und auch wenn eine manuelle Steuerung über die Handhabung von Textdaten erwünscht ist. Der einfachste Weg, einen binären Stream zu erzeugen, ist mit open () mit b in der Moduszeichenfolge: Binäre Datenströme im Speicher sind ebenfalls als BytesIO-Objekte verfügbar: Die Binärstrom-API ist in den Dokumenten von BufferedIOBase ausführlich beschrieben. Andere Bibliotheksmodule können zusätzliche Möglichkeiten zur Erstellung von Text - oder Binärströmen bieten. Siehe socket. socket. makefile () zum Beispiel. 16.2.1.3. Raw I / O Raw I / O (auch als ungepufferte E / A bezeichnet) wird in der Regel als Baustein für Binär - und Textströme verwendet und es ist selten sinnvoll, einen Rohdatenstrom direkt aus dem Anwendercode zu manipulieren. Trotzdem können Sie einen rohen Stream erstellen, indem Sie eine Datei im Binärmodus mit deaktivierter Pufferung öffnen: Die Rohstrom-API wird in den Dokumenten von RawIOBase ausführlich beschrieben. 16.2.2. High-Level-Modulschnittstelle Ein int mit der Standardpuffergröße, die von den gepufferten E / A-Klassen der module8217s verwendet wird. Open () verwendet die file8217s blksize (wie von os. stat () erhalten, wenn möglich. Dies ist ein Alias ​​für die eingebaute open () - Funktion. Ausnahme io. BlockingIOError Dies ist ein Kompatibilitäts-Alias ​​für die eingebaute BlockingIOError-Ausnahme. Ausnahme io. UnsupportedOperation Eine Ausnahme, die OSError und ValueError vererbt, die aufgerufen wird, wenn eine nicht unterstützte Operation auf einem Stream aufgerufen wird. 16.2.2.1. In-Memory-Streams Es ist auch möglich, ein str - oder bytesartiges Objekt als eine Datei zum Lesen und Schreiben zu verwenden. Für Strings kann StringIO wie eine im Textmodus geöffnete Datei verwendet werden. BytesIO kann wie eine im Binärmodus geöffnete Datei verwendet werden. Beide bieten volle Lese-Schreib-Fähigkeiten mit wahlfreiem Zugriff. 16.2.3. Klassenhierarchie Die Implementierung von I / O-Streams ist als Hierarchie von Klassen organisiert. Erste abstrakte Basisklassen (ABCs), die verwendet werden, um die verschiedenen Kategorien von Strömen, dann konkrete Klassen, die die Standard-Stream-Implementierungen. Die abstrakten Basisklassen stellen auch Standardimplementierungen einiger Methoden zur Verfügung, um die Implementierung konkreter Strömungsklassen zu unterstützen. Beispielsweise liefert BufferedIOBase unoptimierte Implementierungen von readinto () und readline (). Am oberen Rand der I / O-Hierarchie befindet sich die abstrakte Basisklasse IOBase. Es definiert die grundlegende Schnittstelle zu einem Stream. Beachten Sie jedoch, dass es keine Trennung zwischen Lesen und Schreiben in Streams-Implementierungen sind erlaubt, um unsupportedOperation zu heben, wenn sie nicht unterstützen einen bestimmten Vorgang. Das RawIOBase ABC erweitert IOBase. Es befasst sich mit dem Lesen und Schreiben von Bytes in einen Stream. FileIO-Unterklassen RawIOBase, um eine Schnittstelle zu Dateien im Dateisystem machine8217s bereitzustellen. Die BufferedIOBase ABC befasst sich mit der Pufferung auf einem Rohdatenstrom (RawIOBase). Seine Unterklassen, BufferedWriter. BufferedReader. Und BufferedRWPair-Pufferströme, die lesbar, beschreibbar und sowohl lesbar als auch beschreibbar sind. BufferedRandom bietet eine gepufferte Schnittstelle für zufällige Zugriffsströme. Eine andere BufferedIOBase-Unterklasse, BytesIO. Ist ein Strom von In-Memory-Bytes. Die TextIOBase ABC, eine weitere Unterklasse von IOBase. Befasst sich mit Strömen, deren Bytes Text darstellen, und behandelt die Codierung und Decodierung von und von Strings. TextIOWrapper. Die es ausdehnt, ist eine gepufferte Textschnittstelle zu einem gepufferten Rohstrom (BufferedIOBase). Schließlich ist StringIO ein In-Memory-Stream für Text. Argumentnamen sind nicht Teil der Spezifikation, und nur die Argumente von open () sollen als Schlüsselwortargumente verwendet werden. Die folgende Tabelle fasst die vom io-Modul bereitgestellten ABCs zusammen: 16.2.3.1. I / O-Basisklassen Die abstrakte Basisklasse für alle E / A-Klassen, die auf Ströme von Bytes wirken. Es gibt keinen öffentlichen Konstruktor. Diese Klasse stellt leere abstrakte Implementierungen für viele Methoden bereit, die abgeleitete Klassen selektiv überschreiben können. Die Standardimplementierungen repräsentieren eine Datei, die nicht gelesen, geschrieben oder gesucht werden kann. Obwohl IOBase read () nicht deklariert. Readinto (). Oder write (), weil ihre Signaturen variieren, Implementierungen und Clients sollten diese Methoden Teil der Schnittstelle. Implementierungen können auch einen ValueError (oder UnsupportedOperation) anheben, wenn Operationen, die sie nicht unterstützen, aufgerufen werden. Der Basistyp, der für binäre Daten verwendet wird, die aus einer Datei gelesen oder geschrieben werden, ist Bytes. Andere bytesähnliche Objekte werden auch als Methodenargumente akzeptiert. In einigen Fällen, wie readinto (). Ist ein beschreibbares Objekt wie ein Bytearray erforderlich. Text-I / O-Klassen arbeiten mit str-Daten. Beachten Sie, dass jeder Aufruf einer Methode (auch Anfragen) auf einem geschlossenen Stream undefiniert ist. Implementierungen können in diesem Fall ValueError generieren. IOBase (und ihre Unterklassen) unterstützt das Iteratorprotokoll, was bedeutet, dass ein IOBase-Objekt über die Zeilen in einem Stream iteriert werden kann. Die Zeilen sind etwas unterschiedlich definiert, je nachdem, ob es sich bei dem Stream um einen binären Datenstrom (nachgebende Bytes) oder um einen Textstrom (nachgebende Zeichenfolgen) handelt. Siehe readline () unten. IOBase ist auch ein Kontext-Manager und unterstützt daher die mit-Anweisung. In diesem Beispiel wird die Datei geschlossen, nachdem die mit statement8217s suite beende8212even, wenn eine Ausnahme auftritt: IOBase stellt diese Datenattribute und Methoden: Flush und schließen Sie diesen Stream. Diese Methode hat keine Wirkung, wenn die Datei bereits geschlossen ist. Sobald die Datei geschlossen ist, wird jede Operation auf der Datei (z. B. Lesen oder Schreiben) einen ValueError erhöhen. Als Bequemlichkeit ist es erlaubt, diese Methode mehr als einmal nur den ersten Aufruf aufrufen, wird jedoch eine Wirkung haben. True, wenn der Stream geschlossen ist. Gibt den zugrunde liegenden Dateideskriptor (eine Ganzzahl) des Streams zurück, falls er existiert. Ein OSError wird ausgelöst, wenn das IO-Objekt keinen Dateideskriptor verwendet. Spülen Sie ggf. die Schreibpuffer des Streams. Dies macht nichts für schreibgeschützte und nicht blockierende Streams. Rückgabe True, wenn der Stream interaktiv ist (d. H. Mit einem Terminal / tty-Gerät verbunden). Rückgabe True, wenn der Stream aus gelesen werden kann. Wenn False. Read () erhöht OSError. Eine Zeile aus dem Stream lesen und zurückgeben. Wenn Größe angegeben wird, werden höchstens Größe Bytes gelesen. Der Zeilenabschluss ist immer bn für Binärdateien für Textdateien, das newline-Argument für open () kann verwendet werden, um die erkannten Zeilenabschlüsse zu wählen. Lesen und zurückgeben einer Liste von Zeilen aus dem Stream. Um die Anzahl der gelesenen Zeilen zu steuern: Es werden keine Zeilen mehr gelesen, wenn die Gesamtgröße (in Bytes / Zeichen) aller Zeilen bisher den Hinweis übersteigt. Beachten Sie, dass it8217s bereits möglich ist, um auf Datei-Objekte mit für Zeile in Datei zu iterieren. Ohne Aufruf file. readlines (). Ändern Sie die Stream-Position auf den angegebenen Byte-Offset. Offset wird relativ zu der Position interpretiert, die von woher angegeben wird. Der Standardwert für Woher ist SEEKSET. Werte für WHEN sind: SEEKSET oder 0 8211 Beginn des Streams (der Standard) Offset sollte Null oder positiv SEEKCUR oder 1 8211 aktueller Strom Position Offset kann negativ SEEKEND oder 2 8211 Ende des Stream Offset ist in der Regel negativ Geben Sie die neue absolute Position. Neu in Version 3.1: Die SEEK-Konstanten. Neu in Version 3.3: Einige Betriebssysteme könnten zusätzliche Werte wie os. SEEKHOLE oder os. SEEKDATA unterstützen. Die gültigen Werte für eine Datei können davon abhängen, dass sie im Text - oder Binärmodus geöffnet sind. Rückgabe True, wenn der Stream den Direktzugriff unterstützt. Wenn False. suchen(). Tell () und truncate () erhöhen OSError. Geben Sie die aktuelle Stromposition zurück. Ändern Sie die Größe des Streams auf die angegebene Größe in Byte (oder die aktuelle Position, wenn Größe nicht angegeben ist). Die aktuelle Stromposition isn8217t wurde geändert. Diese Größenänderung kann die aktuelle Dateigröße erweitern oder reduzieren. Im Falle einer Erweiterung hängt der Inhalt des neuen Dateibereichs von der Plattform ab (auf den meisten Systemen sind zusätzliche Bytes nullfüllend). Die neue Dateigröße wird zurückgegeben. Geändert in Version 3.5: Windows wird jetzt null-füllen Dateien bei der Erweiterung. Rückgabe True, wenn der Stream das Schreiben unterstützt. Wenn False. Write () und truncate () wird OSError erhöhen. Schreiben Sie eine Liste der Zeilen in den Stream. Zeilentrenner werden nicht hinzugefügt, so dass es üblich ist, dass jede der Zeilen einen Zeilenabscheider am Ende aufweist. Bereiten Sie sich auf die Zerstörung der Objekte vor. IOBase stellt eine Standardimplementierung dieser Methode zur Verfügung, die die instance () - Methode aufruft. Basisklasse für rohe binäre E / A. Es erbt IOBase. Es gibt keinen öffentlichen Konstruktor. Rohe binäre E / A stellt typischerweise einen niedrigeren Zugriff auf eine zugrundeliegende OS-Vorrichtung oder API bereit und versucht nicht, sie in Primitiven hoher Ebene einzukapseln (dies wird dem gepufferten E / A und Text I / O überlassen, wie dies weiter unten beschrieben wird Seite). Zusätzlich zu den Attributen und Methoden von IOBase. RawIOBase bietet die folgenden Methoden: Lesen bis Größe Bytes aus dem Objekt und zurückgeben. Als Bequemlichkeit, wenn Größe nicht spezifiziert oder -1, readall () aufgerufen wird. Andernfalls wird immer nur ein Systemaufruf durchgeführt. Weniger als Größe Bytes können zurückgegeben werden, wenn der Betriebssystemaufruf weniger als Größe Bytes zurückgibt. Wenn 0 Bytes zurückgegeben werden und die Größe nicht 0 ist, bedeutet dies das Ende der Datei. Wenn sich das Objekt im nicht blockierenden Modus befindet und keine Bytes verfügbar sind, wird None zurückgegeben. Lesen und zurückgeben alle Bytes aus dem Stream, bis EOF, mit mehreren Anrufen an den Stream, wenn nötig. Lesen von Bytes in ein vorab zugewiesenes, beschreibbares bytesartiges Objekt b. Und die Anzahl der gelesenen Bytes zurückgeben. Wenn sich das Objekt im nicht blockierenden Modus befindet und keine Bytes verfügbar sind, wird None zurückgegeben. Schreiben Sie das gegebene Bytes-ähnliche Objekt. B. Auf den zugrunde liegenden Rohstrom und gibt die Anzahl der geschriebenen Bytes zurück. Dies kann kleiner sein als die Länge von b in Bytes, abhängig von den Spezifikationen des zugrundeliegenden Rohstroms und insbesondere, wenn er sich im nicht blockierenden Modus befindet. Keine wird zurückgegeben, wenn der Rohstrom gesetzt ist, nicht zu blockieren, und kein einzelnes Byte könnte leicht darauf geschrieben werden. Der Aufrufer kann b nach dem Zurückgeben dieser Methode freigeben oder mutieren, daher sollte die Implementierung nur während des Methodenaufrufs auf b zugreifen. Klasse io. BufferedIOBase Basisklasse für Binärströme, die eine Art von Pufferung unterstützen. Es erbt IOBase. Es gibt keinen öffentlichen Konstruktor. Der Hauptunterschied zu RawIOBase ist, dass Methoden read (). Readinto () und write () versuchen (jeweils), so viel Eingabe wie gewünscht zu lesen, oder um alle gegebenen Ausgaben zu verbrauchen, auf Kosten von vielleicht mehr als einem Systemaufruf. Darüber hinaus können diese Methoden BlockingIOError auslösen, wenn sich der zugrunde liegende Stream im nicht blockierenden Modus befindet und im Gegensatz zu seinen RawIOBase-Pendants keine genügend Daten empfangen oder geben kann, werden sie niemals None zurückgeben. Außerdem hat die read () - Methode keine Standardimplementierung, die auf readinto () verweist. Eine typische BufferedIOBase-Implementierung sollte nicht von einer RawIOBase-Implementierung geerbt werden, sondern eine, wie BufferedWriter und BufferedReader tun. BufferedIOBase liefert oder überschreibt diese Methoden und Attribute zusätzlich zu denen von IOBase: Der zugrundeliegende Rohstrom (eine RawIOBase-Instanz), die BufferedIOBase behandelt. Dies ist nicht Teil der BufferedIOBase API und kann bei einigen Implementierungen nicht existieren. Trennen Sie den zugrundeliegenden Rohstrom vom Puffer und geben Sie ihn zurück. Nach dem Ablösen des Rohstroms befindet sich der Puffer in einem unbrauchbaren Zustand. Einige Puffer, wie BytesIO. Haben nicht das Konzept eines einzelnen Rohstroms, von dieser Methode zurückzukehren. Sie erhöhen unsupportedOperation. Neu in Version 3.1. Lesen und zurückgeben bis Größe Bytes. Wenn das Argument weggelassen wird, Keine. Oder negativ, werden Daten gelesen und zurückgegeben, bis EOF erreicht ist. Ein leeres Bytes-Objekt wird zurückgegeben, wenn der Stream bereits auf EOF ist. Wenn das Argument positiv ist und der zugrundeliegende Rohstrom nicht interaktiv ist, können mehrere Rohlesungen ausgegeben werden, um die Bytezählung zu erfüllen (es sei denn, daß EOF zuerst erreicht wird). Für interaktive Rohdatenströme wird jedoch höchstens ein Rohwert ausgegeben, und ein kurzes Ergebnis bedeutet nicht, dass EOF unmittelbar bevorsteht. Ein BlockingIOError wird ausgelöst, wenn sich der zugrunde liegende Stream im nicht blockierenden Modus befindet und zurzeit keine Daten verfügbar sind. Lesen und zurückgeben bis zu Größe Bytes, mit höchstens einem Aufruf der zugrunde liegenden raw stream8217s read () (oder readinto ()) Methode. Dies kann nützlich sein, wenn Sie Ihre eigene Pufferung auf einem BufferedIOBase-Objekt implementieren. Lesen Sie die Bytes in ein vorab zugewiesenes, schreibbares bytesartiges Objekt b und geben Sie die Anzahl der gelesenen Bytes zurück. Wie read (). Können mehrere Lesevorgänge an den darunterliegenden Rohstrom ausgegeben werden, sofern diese nicht interaktiv sind. Ein BlockingIOError wird ausgelöst, wenn sich der zugrunde liegende Stream im nicht blockierenden Modus befindet und zurzeit keine Daten verfügbar sind. Lesen von Bytes in ein vorab zugewiesenes, beschreibbares bytesartiges Objekt b. Wobei höchstens ein Aufruf der zugrunde liegenden raw stream8217s read () (oder readinto ()) Methode verwendet wird. Geben Sie die Anzahl der gelesenen Bytes zurück. Ein BlockingIOError wird ausgelöst, wenn sich der zugrunde liegende Stream im nicht blockierenden Modus befindet und zurzeit keine Daten verfügbar sind. Neu in Version 3.5. Schreiben Sie das gegebene Bytes-ähnliche Objekt. B. Und gibt die Anzahl der geschriebenen Bytes zurück (immer gleich der Länge von b in Bytes, da bei einem Schreibfehler ein OSError ausgelöst wird). Abhängig von der tatsächlichen Implementierung können diese Bytes leicht in den zugrundeliegenden Strom geschrieben werden oder in einem Puffer für Leistungs - und Latenzgründe gehalten werden. Im nicht blockierenden Modus wird ein BlockingIOError ausgelöst, wenn die Daten benötigt werden, um in den Rohstrom geschrieben zu werden, aber es konnte nicht akzeptieren, dass alle Daten blockiert werden. Der Aufrufer kann b nach dem Zurückgeben dieser Methode freigeben oder mutieren, daher sollte die Implementierung nur während des Methodenaufrufs auf b zugreifen. 16.2.3.2. Raw File I / O FileIO repräsentiert eine OS-Datei mit Byte-Daten. Es implementiert die RawIOBase-Schnittstelle (und damit auch die IOBase-Schnittstelle). Der Name kann eine von zwei Dingen sein: eine Zeichenfolge oder ein Byte-Objekt, das den Pfad der Datei darstellt, die geöffnet wird. In diesem Fall muss closefd True sein (die Standardeinstellung), andernfalls wird ein Fehler ausgelöst. Eine Ganzzahl, die die Nummer eines existierenden OS-Dateideskriptors darstellt, auf den das resultierende FileIO-Objekt Zugriff gewährt. Wenn das FileIO-Objekt geschlossen wird, wird diese fd ebenfalls geschlossen, es sei denn, closefd ist auf False gesetzt. Der Modus kann r sein. W. X oder a für das Lesen (Standard), das Schreiben, das exklusive Erstellen oder Anhängen. Die Datei wird erstellt, wenn es doesn8217t existiert, wenn es zum Schreiben geöffnet ist oder wenn es anhängt, wird es abgeschnitten, wenn es zum Schreiben geöffnet wird. FileExistsError wird angehoben, wenn es bereits vorhanden ist, wenn zum Erstellen geöffnet. Das Öffnen einer Datei für das Erstellen impliziert Schreiben, so dass dieser Modus verhält sich in einer ähnlichen Weise zu w. Fügen Sie a zum Modus hinzu, um das gleichzeitige Lesen und Schreiben zu ermöglichen. Der read () (wenn mit einem positiven Argument aufgerufen), readinto () und write () Methoden in dieser Klasse wird nur einen Systemaufruf. Ein benutzerdefinierter Opener kann verwendet werden, indem ein Callable als Opener übergeben wird. Der zugrundeliegende Dateideskriptor für das Dateiobjekt wird dann durch Aufruf von opener mit (name. Flags) erhalten. Opener muss einen offenen Dateideskriptor zurückgeben (das Übergeben von os. open als Opener führt zu Funktionalität ähnlich der Übergabe von None). Beispiele für die Verwendung des opener-Parameters finden Sie in der open () - Funktion. In Version 3.3 geändert: Der Parameter opener wurde hinzugefügt. Der x-Modus wurde hinzugefügt. Geändert in Version 3.4: Die Datei ist jetzt nicht vererbbar. Zusätzlich zu den Attributen und Methoden von IOBase und RawIOBase. FileIO bietet die folgenden Datenattribute: Der Modus wie im Konstruktor angegeben. Der Dateiname. Dies ist der Dateideskriptor der Datei, wenn kein Name im Konstruktor angegeben ist. 16.2.3.3. Gepufferte Datenströme Gepufferte E / A-Datenströme bieten eine übergeordnete Schnittstelle zu einem E / A-Gerät als rohe E / A. Eine Stromimplementierung unter Verwendung eines In-Memory-Byte-Puffers. Er erbt BufferedIOBase. Der Puffer wird verworfen, wenn die close () - Methode aufgerufen wird. Das optionale Argument initialbytes ist ein bytesähnliches Objekt, das Anfangsdaten enthält. BytesIO liefert oder überschreibt diese Methoden zusätzlich zu denen von BufferedIOBase und IOBase: Liefert eine lesbare und beschreibbare Ansicht über den Inhalt des Puffers ohne sie zu kopieren. Auch die Mutation der Ansicht wird transparent den Inhalt des Puffers aktualisieren: Solange die Ansicht vorhanden ist, kann das BytesIO-Objekt nicht verkleinert oder geschlossen werden. Neu in Version 3.2. Rückgabebytes, die den gesamten Inhalt des Puffers enthalten. In BytesIO. Das ist das gleiche wie read (). In BytesIO. Dies ist das gleiche wie readinto (). Neu in Version 3.5. Klasse io. BufferedReader (raw. buffersizeDEFAULTBUFFERSIZE) Ein Puffer, der übergeordneten Zugriff auf ein lesbares, sequentielles RawIOBase-Objekt bietet. Er erbt BufferedIOBase. Wenn Daten aus diesem Objekt gelesen werden, kann eine größere Menge an Daten von dem darunterliegenden Rohstrom angefordert und in einem internen Puffer gehalten werden. Die gepufferten Daten können dann direkt auf nachfolgende Lesevorgänge zurückgegeben werden. Der Konstruktor erstellt einen BufferedReader für den angegebenen lesbaren Rohstrom und Puffersize. Wenn buffersize weggelassen wird, wird DEFAULTBUFFERSIZE verwendet. BufferedReader liefert oder überschreibt diese Methoden zusätzlich zu denen von BufferedIOBase und IOBase: Rückgabe Bytes aus dem Stream ohne Fortschritte der Position. Höchstens ein einziges Lesen auf dem Rohstrom wird durchgeführt, um den Anruf zu erfüllen. Die Anzahl der zurückgegebenen Bytes kann kleiner oder größer sein als angefordert. Lesen und zurückgeben Größe Bytes, oder wenn Größe nicht gegeben oder negativ, bis EOF oder wenn der Lese-Aufruf blockieren würde im nicht blockierenden Modus. Lesen und zurückgeben bis Größe Bytes mit nur einem Aufruf auf dem Rohstrom. Wenn mindestens ein Byte gepuffert wird, werden nur gepufferte Bytes zurückgegeben. Andernfalls wird ein Rohdatenstrom-Aufruf durchgeführt. Klasse io. BufferedWriter (raw. buffersizeDEFAULTBUFFERSIZE) Ein Puffer, der übergeordneten Zugriff auf ein beschreibbares, sequentielles RawIOBase-Objekt bietet. Er erbt BufferedIOBase. Beim Schreiben auf dieses Objekt werden die Daten normalerweise in einen internen Puffer gelegt. Der Puffer wird unter verschiedenen Bedingungen in das zugrunde liegende RawIOBase-Objekt geschrieben, einschließlich: wenn der Puffer zu klein für alle anstehenden Daten wird, wenn flush () aufgerufen wird, wenn ein seek () für das BufferedWriter-Objekt angefordert wird (für BufferedRandom-Objekte) Geschlossen oder zerstört. Der Konstruktor erstellt einen BufferedWriter für den angegebenen schreibbaren Rohstrom. Wenn die Puffergröße nicht angegeben wird, wird sie standardmäßig auf DEFAULTBUFFERSIZE gesetzt. BufferedWriter bietet oder überschreibt diese Methoden zusätzlich zu denen von BufferedIOBase und IOBase: Force-Bytes in den Puffer in den Rohstrom gehalten. Ein BlockingIOError sollte angehoben werden, wenn der Rohstrom blockiert. Schreiben Sie das Bytes-ähnliche Objekt. B. Und die Anzahl der geschriebenen Bytes zurück. Im nicht-blockierenden Modus wird ein BlockingIOError angehoben, wenn der Puffer ausgeschrieben werden muss, aber der rohe Stream blockiert. Klasse io. BufferedRandom (raw. buffersizeDEFAULTBUFFERSIZE) Eine gepufferte Schnittstelle für zufällige Zugriffsströme. Er erbt BufferedReader und BufferedWriter. Und weiter unterstützt die Funktion seek () und tell (). Der Konstruktor erzeugt einen Leser und einen Schreiber für einen suchbaren Rohstrom, der in dem ersten Argument angegeben ist. Wenn die Puffergröße weggelassen wird, wird sie standardmäßig auf DEFAULTBUFFERSIZE gesetzt. Klasse io. Ein gepuffertes E / A-Objekt, das zwei unidirektionale RawIOBase-Objekte 8211 ein lesbares, das andere beschreibbare 8211 zu einem einzigen bidirektionalen Endpunkt kombiniert. BufferedRWPair (reader. writer. buffersizeDEFAULTBUFFERSIZE) Er erbt BufferedIOBase. Reader und Schreiber sind RawIOBase-Objekte, die lesbar bzw. beschreibbar sind. Wenn die Puffergröße weggelassen wird, wird sie standardmäßig auf DEFAULTBUFFERSIZE gesetzt. BufferedRWPair versucht nicht, die Zugriffe auf die zugrundeliegenden Rohdatenströme zu synchronisieren. Sie sollten es nicht übergeben das gleiche Objekt wie Leser und Schriftsteller verwenden BufferedRandom statt. 16.2.3.4. Text I / O Basisklasse für Textströme. Diese Klasse bietet eine zeichen - und zeilenbasierte Schnittstelle für Stream I / O. Es gibt keine readinto () Methode, weil Python8217s Zeichenketten unveränderlich sind. Es erbt IOBase. Es gibt keinen öffentlichen Konstruktor. TextIOBase liefert oder überschreibt diese Datenattribute und - methoden zusätzlich zu denen von IOBase: Der Name der Codierung, die verwendet wird, um die stream8217s-Bytes in Zeichenfolgen zu decodieren und Zeichenfolgen in Byte zu codieren. Die Fehlereinstellung des Decoders oder Encoders. Ein String, ein Tupel von Strings oder None. Was die bisher übersetzten Zeilenumbrüche anzeigt. Abhängig von der Implementierung und den ersten Konstruktor-Flags ist diese Option möglicherweise nicht verfügbar. Der zugrundeliegende binäre Puffer (eine BufferedIOBase-Instanz), mit der sich TextIOBase beschäftigt. Dies ist nicht Teil der TextIOBase API und kann in einigen Implementierungen nicht vorhanden sein. Trennen Sie den zugrundeliegenden binären Puffer von der TextIOBase und geben Sie ihn zurück. Nachdem der zugrunde liegende Puffer entfernt wurde, befindet sich die TextIOBase in einem unbrauchbaren Zustand. Einige TextIOBase-Implementierungen, wie StringIO. Möglicherweise nicht das Konzept eines zugrunde liegenden Puffer und Aufruf dieser Methode wird unsupportedOperation erhöhen. Neu in Version 3.1. Lesen und zurückgeben Größe Zeichen aus dem Stream als einzelne Str. Wenn Größe negativ oder Keine. Liest bis EOF. Lesen Sie bis newline oder EOF und geben Sie einen String zurück. Wenn der Stream bereits bei EOF ist, wird eine leere Zeichenfolge zurückgegeben. Wenn Größe angegeben wird, werden die meisten Zeichen der Größe gelesen. Ändern Sie die Stream-Position auf den angegebenen Offset. Das Verhalten hängt vom Parameter whence ab. Der Standardwert für Woher ist SEEKSET. SEEKSET oder 0. suchen vom Start des Streams (der Standardwert) offset muss entweder eine Zahl sein, die von TextIOBase. tell () zurückgegeben wird. Oder Null. Jeder andere Offsetwert erzeugt undefiniertes Verhalten. SEEKCUR oder 1. 8220seek8221 auf den aktuellen Positionsoffset muss Null sein, was eine No-Operation ist (alle anderen Werte werden nicht unterstützt). SEEKEND oder 2. ans Ende des Stream Offset muss null sein (alle anderen Werte werden nicht unterstützt). Geben Sie die neue absolute Position als undurchsichtige Zahl zurück. Neu in Version 3.1: Die SEEK-Konstanten. Geben Sie die aktuelle Stromposition als opake Zahl zurück. Die Zahl repräsentiert normalerweise nicht eine Anzahl von Bytes im zugrundeliegenden binären Speicher. Schreiben Sie die Zeichenfolge s in den Stream und geben Sie die Anzahl der geschriebenen Zeichen zurück. Klasse io. TextIOWrapper (buffer. codingNone. FehlerNone newlineNone. linebufferingFalse. threadFalse) Ein gepufferter Textstrom über einen BufferedIOBase-Binärstrom. Er erbt TextIOBase. Encoding gibt den Namen der Codierung an, mit der der Stream decodiert oder codiert wird. Die Standardeinstellung ist locale. getpreferredencoding (False). Fehler ist ein optionaler String, der angibt, wie Codierungs - und Decodierungsfehler behandelt werden sollen. Übergeben Sie strict, um eine ValueError-Ausnahme zu erhöhen, wenn es einen Codierungsfehler gibt (die Standardeinstellung von None hat denselben Effekt) oder ignorieren, um Fehler zu ignorieren. (Beachten Sie, dass das Ignorieren von Codierungsfehlern zu Datenverlusten führen kann.) Ersetzen bewirkt, dass eine Ersatzmarkierung (wie z. B.) eingefügt wird, wenn fehlerhafte Daten vorliegen. Backslashreplace verursacht, dass fehlerhafte Daten durch eine backslashed Escape-Sequenz ersetzt werden. Beim Schreiben kann xmlcharrefreplace (ersetzt durch die entsprechende XML-Zeichenreferenz) oder namereplace (ersetzt durch N escape-Sequenzen) verwendet werden. Jeder andere Fehlerbehandlungsname, der mit codecs. registererror () registriert wurde, ist ebenfalls gültig. Newline steuert, wie Zeilenendungen behandelt werden. Es kann keine sein. . N ist. R. Und rn. Es funktioniert wie folgt: Beim Lesen von Daten aus dem Stream, wenn newline ist Keine. Universal-Zeilenvorschubmodus aktiviert ist. Zeilen im Eingang können in n enden. R. Oder rn. Und diese werden in n übersetzt, bevor sie an den Anrufer zurückgesendet werden. Wenn es so ist. Universal-Zeilenvorschubmodus aktiviert ist, aber Zeilenendungen an den Aufrufer unübersetzt zurückgegeben werden. Wenn es einen der anderen gesetzlichen Werte hat, werden Eingabezeilen nur durch den angegebenen String beendet und die Zeilenendung an den Aufrufer unübersetzt zurückgegeben. Beim Schreiben der Ausgabe in den Stream, wenn newline ist Keine. Alle n Zeichen, die geschrieben werden, werden zum Systemvoreinstellungslinie Trennzeichen, os. linesep übersetzt. Wenn newline ist oder n. Findet keine Übersetzung statt. Wenn newline irgendein anderer gesetzlicher Wert ist, werden alle geschriebenen n Zeichen in den gegebenen String übersetzt. Wenn das Zeilenpuffering True ist. Flush () ist impliziert, wenn ein Aufruf zum Schreiben ein Zeilenumbruchzeichen enthält. Wenn Durchschreiben wahr ist. Aufrufen von write () wird garantiert nicht gepuffert: alle Daten, die auf das TextIOWrapper-Objekt geschrieben werden, werden sofort an den zugrunde liegenden binären Puffer verarbeitet. Geändert in Version 3.3: Das schreibende Argument wurde hinzugefügt. Geändert in Version 3.3: Die Standardcodierung ist jetzt locale. getpreferredencoding (False) anstelle von locale. getpreferredencoding (). Don8217t temporär die Locale-Codierung mit locale. setlocale () ändern. Verwenden Sie die aktuelle Gebietsschema-Kodierung anstelle der benutzerdefinierten Kodierung. TextIOWrapper bietet ein Attribut zusätzlich zu denen von TextIOBase und seinen Eltern: Ob Zeilenpufferung aktiviert ist. Ein In-Speicher-Stream für Text-I / O. Der Textpuffer wird verworfen, wenn die close () - Methode aufgerufen wird. Der Anfangswert des Puffers kann eingestellt werden, indem ein Anfangswert bereitgestellt wird. Wenn newline-Übersetzung aktiviert ist, werden newlines wie durch write () codiert. Der Stream wird am Anfang des Puffers positioniert. Das newline-Argument funktioniert wie das von TextIOWrapper. Die Voreinstellung ist, nur n Zeichen als Zeilenenden zu betrachten und keine Newline-Übersetzung zu machen. Wenn newline auf None gesetzt ist. Newlines werden als n auf allen Plattformen geschrieben, aber die universelle Newline-Decodierung wird immer noch beim Lesen durchgeführt. StringIO bietet diese Methode zusätzlich zu denen von TextIOBase und seinen Eltern an: Gibt einen Str zurück, der den gesamten Inhalt des Puffers enthält. Newlines werden wie durch read () decodiert. Obwohl die Stromposition nicht geändert wird. Klasse io. IncrementalNewlineDecoder 16.2.4. Performance In diesem Abschnitt wird die Leistungsfähigkeit der konkreten I / O-Implementierungen erläutert. 16.2.4.1. Binäre E / A Durch das Lesen und Schreiben nur großer Datenblöcke, auch wenn der Benutzer nach einem einzelnen Byte fragt, verbirgt die gepufferte E / A jede Ineffizienz beim Aufrufen und Ausführen der ungepufferten E / A-Routinen des Betriebssystems8217. Die Verstärkung hängt vom Betriebssystem und der Art der ausgeführten E / A ab. Zum Beispiel kann auf einigen modernen Betriebssystemen wie Linux, ungepufferte Festplatten-E / A so schnell wie gepufferte E / A sein. Die untere Zeile ist jedoch, dass gepufferte E / A eine vorhersagbare Leistung unabhängig von der Plattform und dem Hintergrundgerät bietet. Daher ist es fast immer besser, gepufferte E / A als ungepufferte E / A für binäre Daten zu verwenden. 16.2.4.2. Text-I / O-Text-I / O über einen binären Speicher (z. B. eine Datei) ist signifikant langsamer als die binäre E / A über denselben Speicher, da es Umwandlungen zwischen Unicode und Binärdaten mit einem Zeichencodec erfordert. Dies kann spürbar Umgang mit großen Mengen an Text-Daten wie große Log-Dateien. Auch TextIOWrapper. tell () und TextIOWrapper. seek () sind beide ziemlich langsam aufgrund des Rekonstruktionsalgorithmus verwendet. StringIO. Ist jedoch ein native In-Memory-Unicode-Container und wird ähnliche Geschwindigkeit zu BytesIO zeigen. 16.2.4.3. Multi-threading FileIO-Objekte sind in dem Ausmaß Thread-sicher, dass die Betriebssystemaufrufe (wie lesen (2) unter Unix) sie wrap sind auch threadsicher sind. Binär gepufferte Objekte (Instanzen von BufferedReader, BufferedWriter, BufferedRandom und BufferedRWPair) schützen ihre internen Strukturen mit einer Sperre, so dass sie sicher von mehreren Threads gleichzeitig aufgerufen werden können. TextIOWrapper-Objekte sind nicht threadsicher. 16.2.4.4. Reentrancy Binär gepufferte Objekte (Instanzen von BufferedReader, BufferedWriter, BufferedRandom und BufferedRWPair) sind nicht wiedereintrittsfähig. Während wiederkehrende Anrufe in normalen Situationen nicht auftreten, können sie aus dem Ausführen von E / A in einem Signalhandler auftreten. Wenn ein Thread versucht, ein gepuffertes Objekt erneut einzugeben, auf das es bereits zugreift, wird ein RuntimeError ausgelöst. Beachten Sie, dass doesn8217t einen anderen Thread davon abhält, das gepufferte Objekt einzugeben. Das obige bezieht sich implizit auf Textdateien, da die open () - Funktion ein gepuffertes Objekt in einem TextIOWrapper umhüllt. Dies schließt Standardströme ein und beeinflusst daher auch die eingebaute Funktion print (). Danke für die Kontaktaufnahme mit mir. Ive hat Sie zu GenoMeds Kontaktliste, so youll erhalten Sie Pressemitteilungen wie die, die ich ausgesandt 4. März 2010, als ich zum ersten Mal hörte, dass die SEC hat den Handel in unserem Lager suspendiert. Die SEC-Position ist ziemlich geschnitten und getrocknet. Wir havent abgelegt mit ihnen seit 2005, und ihre Position ist, dass wir nicht eine öffentliche Gesellschaft sein sollten, es sei denn, wir fortsetzen, mit ihnen zu archivieren. Leider, Auditoren und SEC-Anwälte, ganz zu schweigen von Sarbannes-Oxley Anforderungen, kosten würde uns eine zusätzliche 100K oder so pro Jahr. An dieser Stelle können wir einfach nicht leisten, um mit unseren SEC-Archivierung Anforderungen halten. Ich hoffe, dass sich unsere finanzielle Situation bald ändert, und wir können uns wieder bei der SEC anmelden und den Handel an einer Börse fortsetzen. Für den Augenblick haben wir keine Alternative, aber als nicht handelsfähiges, d. H. Privates Unternehmen weiterzugehen, bis wir genügend Geld haben, um sich erneut mit der SEC zu registrieren und den Handel fortzusetzen. Ich habe keine Ahnung, wie lange das sein wird. Ich hoffe, dass die Welt über unsere Fähigkeit hören wird, 90 der Dialyse zu verhindern und gut bald haben Tausende von Patienten, die wollen, dass wir sie von Dialyse zu halten. Aber das ist noch nicht passiert. Ich versuche immer, das Wort aus dem Alltag zu bekommen, wie viele von Ihnen tun. Jedenfalls versichert die SEC, dass die gegenwärtige Maßnahme unsere Chancen, sich mit ihnen zu registrieren, nicht nachteilig auswirken wird, sobald sich unsere Finanzen verbessert haben. Ich verspreche, dass Sie so genau aufbewahrt werden, jetzt, dass private waren, wie ich, als wir öffentlich waren. Ich verspreche auch, alle meine Investoren fair behandeln. Ive beauftragte den Börsenagenten, mir eine Liste der Aktionäre ab dem 3. März 2010 zu schicken, damit ich alle Ihre eMail auf unsere Vorlagenliste laden kann. Ich würde es begrüßen, wenn Sie mich selbst kontaktiert haben, zusammen mit der Anzahl der Aktien, die Sie besitzen, so dass ich Ihnen Unternehmensnachrichten senden kann, wenn ich sie an alle anderen senden. PLEASE DO NOT THROW AWAY YOUR GENOMED SHARE CERTIFICATES You will need them to prove your prior investment in the company. They still have value. Even though you cant trade them on a public exchange like the Pink Sheets anymore, its perfectly legal for you to trade them amongst yourselves. Best regards, Dave Moskowitz MD CEO, GenoMed, Inc. 2001-2016 GenoMed. All rights reserved. Python Cookbook, 2nd Edition 1.21. Converting Between Unicode and Plain Strings Discussion If you find yourself dealing with text that contains non-ASCII characters, you have to learn about Unicodewhat it is, how it works, and how Python uses it. The preceding Recipe 1.20 offers minimal but crucial practical tips, and this recipe tries to offer more perspective. You dont need to know everything about Unicode to be able to solve real-world problems with it, but a few basic tidbits of knowledge are indispensable. First, you must understand the difference between bytes and characters. In older, ASCII-centric languages and environments, bytes and characters are treated as if they were the same thing. A byte can hold up to 256 different values, so these environments are limited to dealing with no more than 256 distinct characters. Unicode, on the other hand, has tens of thousands of characters, which means that each Unicode character takes more than one byte thus you need to make the distinction between characters and bytes. Standard Python strings are really bytestrings, and a Python character, being such a string of length 1, is really a byte. Other terms for an instance of the standard Python string type are 8-bit string and plain string . In this recipe we call such instances bytestrings, to remind you of their byte orientation. A Python Unicode character is an abstract object big enough to hold any character, analogous to Pythons long integers. You dont have to worry about the internal representation the representation of Unicode characters becomes an issue only when you are trying to send them to some byte-oriented function, such as the write method of files or the send method of network sockets. At that point, you must choose how to represent the characters as bytes. Converting from Unicode to a bytestring is called encoding the string. Similarly, when you load Unicode strings from a file, socket, or other byte-oriented object, you need to decode the strings from bytes to characters. Converting Unicode objects to bytestrings can be achieved in many ways, each of which is called an encoding . For a variety of historical, political, and technical reasons, there is no one right encoding. Every encoding has a case-insensitive name, and that name is passed to the encode and decode methods as a parameter. Here are a few encodings you should know about: The UTF-8 encoding can handle any Unicode character. It is also backwards compatible with ASCII, so that a pure ASCII file can also be considered a UTF-8 file, and a UTF-8 file that happens to use only ASCII characters is identical to an ASCII file with the same characters. This property makes UTF-8 very backwards-compatible, especially with older Unix tools. UTF-8 is by far the dominant encoding on Unix, as well as the default encoding for XML documents. UTF-8s primary weakness is that it is fairly inefficient for eastern-language texts. The UTF-16 encoding is favored by Microsoft operating systems and the Java environment. It is less efficient for western languages but more efficient for eastern ones. A variant of UTF-16 is sometimes known as UCS-2. The ISO-8859 series of encodings are supersets of ASCII, each able to deal with 256 distinct characters. These encodings cannot support all of the Unicode characters they support only some particular language or family of languages. ISO-8859-1, also known as Latin-1, covers most western European and African languages, but not Arabic. ISO-8859-2, also known as Latin-2, covers many eastern European languages such as Hungarian and Polish. ISO-8859-15, very popular in Europe these days, is basically the same as ISO-8859-1 with the addition of the Euro currency symbol as a character. If you want to be able to encode all Unicode characters, youll probably want to use UTF-8. You will need to deal with the other encodings only when you are handed data in those encodings created by some other application or input device, or vice versa, when you need to prepare data in a specified encoding to accommodate another application downstream of yours, or an output device. In particular, Recipe 1.22 shows how to handle the case in which the downstream application or device is driven from your programs standard output stream. Unicode is a huge topic, but a recommended book is Tony Graham, Unicode: A Primer (Hungry Minds)details are available at menteith/unicode/primer/ and a short, but complete article from Joel Spolsky, The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses) is located at joelonsoftware/articles/Unicode. html. See also the Library Reference and Python in a Nutshell documentation about the built-in str and unicode types, and modules unidata and codecs also, Recipe 1.20 and Recipe 1.22 . Der beste Inhalt für Ihre Karriere. Entdecken Sie unbegrenztes Lernen auf Nachfrage für rund 1 / Tag.


No comments:

Post a Comment