Байты к человеку читабельно и обратно. без потери данныхPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Байты к человеку читабельно и обратно. без потери данных

Сообщение Anonymous »

Мне нужно преобразовать строки, которые содержат использование памяти в байтах, например: 1048576 (что составляет 1m) в именно то, что, читаемая человеческая версия, и Visa-versa.
note : я уже посмотрел здесь:
Получить человеку, понятную версию файла it it wit wit it it verreatable версии файла it it wit wit wit it it verreatable file . Python):
Как преобразовать размер чтения памяти человека в байты? http://code.google.com/p/pyftpdlib/sour ... &r=984#137> Код:

Код: Выделить всё

def bytes2human(n, format="%(value)i%(symbol)s"):
"""
>>> bytes2human(10000)
'9K'
>>> bytes2human(100001221)
'95M'
"""
symbols = ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
prefix = {}
for i, s in enumerate(symbols[1:]):
prefix[s] = 1 = prefix[symbol]:
value = float(n) / prefix[symbol]
return format % locals()
return format % dict(symbol=symbols[0], value=n)
< /code>
, а также функция для преобразования наоборот (тот же сайт): < /p>
def human2bytes(s):
"""
>>> human2bytes('1M')
1048576
>>> human2bytes('1G')
1073741824
"""
symbols = ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
letter = s[-1:].strip().upper()
num = s[:-1]
assert num.isdigit() and letter in symbols
num = float(num)
prefix = {symbols[0]:1}
for i, s in enumerate(symbols[1:]):
prefix[s] = 1 
Это здорово и все, но у него есть некоторая потеря информации, пример: < /p>
>>> bytes2human(10000)
'9K'
>>> human2bytes('9K')
9216
Чтобы попытаться решить это, я изменяю форматирование функции Bytes2human
in: format = "%(значение) .3f%(Symbol) s")
, что гораздо приятнее, давая мне эти результаты:

.

Код: Выделить всё

>>> bytes2human(10000)
'9.766K'
Но когда я пытаюсь преобразовать их обратно с помощью функции Human2bytes :

Код: Выделить всё

>>> human2bytes('9.766K')

Traceback (most recent call last):
File "
", line 1, in 
human2bytes('9.766K')
File "", line 12, in human2bytes
assert num.isdigit() and letter in symbols
AssertionError
Это из-за.
Итак, мой вопрос в том, как я могу преобразовать читаемую человеку версию обратно в Byte-версию, без потери данных? Но для целей этого вопроса давайте пока не проигнорируем это, я всегда могу изменить это на что -то большее.

Подробнее здесь: https://stackoverflow.com/questions/133 ... -data-loss
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»