Bytes für Menschen lesbar und zurück. ohne Datenverlust

8

Ich muss Zeichenfolgen, die die Speicherauslastung in Bytes enthalten, wie: 1048576 (das ist 1M) in genau das, eine für Menschen lesbare Version, umwandeln und umgekehrt.

Hinweis : Ich habe schon hier gesucht: Wiederverwendbare Bibliothek, um eine lesbare Version der Dateigröße zu erhalten?

Und hier (obwohl es nicht Python ist): Wie konvertiert man die lesbare Speichergröße in Bytes?

Bisher half mir nichts, also schaute ich woanders hin.

Ich habe etwas gefunden, das dies für mich tut: Ссылка oder, für kürzere URL: Ссылка

Der Code:

%Vor%

Und auch eine Funktion zur umgekehrten Konvertierung (gleiche Seite):

%Vor%

Das ist großartig und alles, aber es hat einige Informationsverluste, Beispiel:

%Vor%

Um zu versuchen, dies zu lösen, ändere ich die Formatierung der Funktion bytes2human

In: format="%(value).3f%(symbol)s")

Was viel schöner ist, gibt mir diese Ergebnisse:

%Vor%

aber wenn ich versuche, sie mit der Funktion human2bytes zurück zu konvertieren:

%Vor%

Dies liegt an der .

Meine Frage ist also, wie kann ich eine von Menschen lesbare Version ohne Datenverlust in eine Byte-Version konvertieren?

Hinweis : Ich weiß, dass 3 Dezimalstellen auch ein wenig Datenverlust sind. Aber für die Zwecke dieser Frage, lasst uns ignorieren, dass ich das vorläufig immer zu etwas Größerem ändern kann.

    
Inbar Rose 12.11.2012, 12:28
quelle

2 Antworten

5

Es stellte sich heraus, dass die Antwort viel einfacher war als ich dachte - einer der Links, die ich zur Verfügung gestellt habe, führte zu einer viel detaillierteren Version des Funktion :

Das ist in der Lage, mit jedem Umfang umzugehen, den ich ihm gebe.

Aber danke für Ihre Hilfe:

Der Code kopiert hier für die Nachwelt:

%Vor%     
Inbar Rose 19.11.2012, 07:47
quelle
4

Sie beantworten Ihre eigene Frage in Ihrer letzten Notiz dort ziemlich genau.

In human2bytes(s) wird die Eingabezeichenfolge - zum Beispiel 9.766K - in zwei Teile aufgeteilt, die Nummer und das Präfix. Nach der Assertion (die, wie Sie richtig sehen, den Fehler verursacht), wird die Zahl mit dem entsprechenden Wert multipliziert, den das Präfix darstellt, also 9.766 * 1000 = 9766 . Die einzige Möglichkeit, Datenverlust zu "vermeiden", besteht darin, einen ausreichend genauen Fließkommawert als Eingabe zu akzeptieren.

Damit human2bytes Fließkommaeingabe akzeptiert, können Sie entweder num.isdigit() aus der Assertion entfernen und dann die Typumwandlung num = float(num) mit try-except oder lfk 12.11.2012 12:45

quelle