Al igual que la millor forma de representar es la duració (en temps) es evitant gastar números màgics amb datetime.timedelta() , també deuriem poder expresar el tamany (bits i bytes) d’un fitxer d’una forma senzilla. Per això, i com que no vaig trobar cap llibreria que m’ho permetera, vaig decidir crear-la jo.

Com diria el meme:

This is REAL code written by REAL PROGRAMMERS:

GiB_1_IN_BYTES: int = 1_073_741_824
MiB_200_IN_BYTES: int = 209_715_200
MiB_50_IN_BYTES: int = 52_428_800
MiB_30_IN_BYTES: int = 31_457_280

Amb octet el codi es podria reescriure d’esta manera (encara que de fet ja no caldria crear constants perquè es prou autoexplicatiu):

from octet import GiB, MiB, Byte

GiB_1_IN_BYTES: int = GiB(1).convert_to(Byte).value
MiB_200_IN_BYTES: int = MiB(200).convert_to(Byte).value
MiB_50_IN_BYTES: int = MiB(50).convert_to(Byte).value
MiB_30_IN_BYTES: int = (30 * MiB()).convert_to(Byte).value

Octet

A preview of EnriqueSoria/octet github repository

Representar tamanys d’informació

Hi ha principalment dos formes de definir valors:

>>> 10 * KiB()
KiB(10)
>>> KiB(10)
KiB(10)

I una extra, a partir de la unitat més xicoteta, que en este cas es el bit

>>> KiB.from_minor_units(8192)
KiB(1)

Convertir entre unitats

>>> KiB(512).convert_to(MiB)
MiB(0.5)
>>> MiB(1).convert_to(bit)
b(8388608)

Comparacions lògiques

>>> Kb() == 1000 * b()
True
>>> 1000 * Kib() == 1024 * Kb()
True
>>> KiB(1) > KiB(0.7)
True

Enllaços