более эффективный способ засолить строку

Слишком сложно, возьмите pointee с takeRetainedValue() - который правильно обрабатывает управление памятью - и приведите его к [URL]

if let urls = LSCopyApplicationURLsForBundleIdentifier("com.aa.bb" as CFString, nil)?.takeRetainedValue() as? [URL],
   let url = urls.first {
     print(url)
}

unsafeBitCast из (CF)URL в (CF)String в любом случае невозможно, чтобы получить путь строки, напишите

print(url.path)
9
задан gatoatigrado 30 March 2009 в 01:48
поделиться

4 ответа

Попытайтесь использовать более позднюю версию протокола рассола с параметром протокола к pickle.dumps(). Значение по умолчанию 0 и является форматом текста ASCII. Больше, чем 1 (я предлагаю Вас, используют рассол. HIGHEST_PROTOCOL). Форматы 1 и 2 протокола (и 3, но это для py3k), являются двоичными и должно быть больше консерватора пространства.

23
ответ дан 4 December 2019 в 06:41
поделиться

Решение:

import zlib, cPickle

def zdumps(obj):
  return zlib.compress(cPickle.dumps(obj,cPickle.HIGHEST_PROTOCOL),9)

def zloads(zstr):
  return cPickle.loads(zlib.decompress(zstr))  

>>> len(zdumps(z))
128
8
ответ дан 4 December 2019 в 06:41
поделиться

Улучшение ответа vartec, которое кажется немного более эффективным с точки зрения памяти (поскольку оно не помещает все в строку):

def pickle(fname, obj):
    import cPickle, gzip
    cPickle.dump(obj=obj, file=gzip.open(fname, "wb", compresslevel=3), protocol=2)

def unpickle(fname):
    import cPickle, gzip
    return cPickle.load(gzip.open(fname, "rb"))
1
ответ дан 4 December 2019 в 06:41
поделиться

z.dumps() - это уже пиклированная строка, т.е. ее можно распиклировать с помощью pickle.loads():

>>> z = numpy.zeros(1000, numpy.uint8)
>>> s = z.dumps()
>>> a = pickle.loads(s)
>>> all(a == z)
True
3
ответ дан 4 December 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: