Есть ли отдельная библиотека преобразования типов Python? - PullRequest
0 голосов
/ 22 января 2009

Существуют ли автономные библиотеки преобразования типов?

У меня есть система хранения данных, которая понимает только байты / строки, но я могу пометить метаданные, такие как тип, в который необходимо преобразовать.

Я мог бы взломать какую-нибудь наивную систему преобразователей типов, как и любое другое приложение, сделанное до меня, или, я надеюсь, мог бы использовать автономную библиотеку, за исключением того, что я не могу ее найти. Странно для такой общей деятельности.

Просто чтобы уточнить, у меня будет что-то вроде:

('123', 'integer') и я хочу выйти 123

Ответы [ 3 ]

3 голосов
/ 22 января 2009

Учтите это.

import datetime

def toDate( someString ):
    return datetime.datetime.strptime( someString, "%x" ).date()

typeConversionMapping = { 'integer': int, 'string': str, 'float': float, 'date': toDate }
def typeConversionFunction( typeConversionTuple ):
    theStringRepresentation, theTypeName = typeConversionTuple
    return typeConversionMapping[theTypeName](theStringRepresentation)

Это достаточно хорошая автономная библиотека для такой обычной деятельности? Будет ли этого достаточно для хорошо протестированной, устойчивой к ошибкам библиотеки? Или требуется что-то еще?

Если вам нужно больше или разные преобразования даты / времени, вы просто добавляете новые функции toDate с различными форматами.

3 голосов
/ 22 января 2009

У вас есть две опции, либо используйте struct или pickle .

С помощью struct вы указываете формат, и он уплотняет ваши данные в байтовый массив. Это полезно для работы со структурами C или записи в сетевые приложения, для которых требуется двоичный протокол.

pickle может автоматически сериализовать и десериализовать сложные структуры Python в строку. Есть некоторые предостережения, поэтому лучше прочитать документацию . Я думаю, что это наиболее вероятная библиотека, которую вы хотите.

>>> import pickle
>>> v = pickle.dumps(123)
>>> v
'I123\n.'
>>> pickle.loads(v)
123
>>> v = pickle.dumps({"abc": 123})
>>> v
"(dp0\nS'abc'\np1\nI123\ns."
>>> pickle.loads(v)
{'abc': 123}
1 голос
/ 18 октября 2009

Flatland делает это хорошо. http://discorporate.us/projects/flatland/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...