Pull to refresh

Comments 9

Оценка качества статьи в тематическом блоге: <рейтинг статьи>/(<количество комментариев>+50)

Спасибо огромное за обертку! Глянул исходники CityHash, после комментария
// Murmur-inspired hashing.
начинается магия =)
А! Понял чего не хватает! Добавьте хотябы простенький readme и в него минимальный кусок кода как этим пользоваться в Python типа

import cityhash

hash=cityhash.CityHash64("hello world!")


Можно ли им хешировать произвольные потоки данных (файлы скажем). В каком виде получается хеш (hex строка или набор бит)
Ок, кое что сам попробовал

sudo aptitude install cython
git clone https://github.com/Amper/cityhash.git
cd cityhash/
chmod +x install.sh
sudo ./install.sh
ipython

In [1]: import cityhash

In [2]: cityhash.CityHash64("hello world!")
Out[2]: 9835112831561035123L

In [3]: cityhash.CityHash128("hello world!")
Out[3]: (9012332723877280322L, 15609784913653702318L)

Как работает CityHashWithSeed не понял.
Хешировать потоково (например открытый файл f=open("fname", "r")) пока не понял как.
Хешировать потоково (например открытый файл f=open(«fname», «r»)) пока не понял как.

Хешировать можно только строки ) Например, содержимое файла.

Как работает CityHashWithSeed не понял.

For convenience, a 64-bit seed is also hashed into the result.

Это хэш с начальным значением, то есть вторым параметром ему передается предыдущий хеш.

А! Понял чего не хватает! Добавьте хотябы простенький readme и в него минимальный кусок кода как этим пользоваться в Python типа

Спасибо, чуть позже обязательно добавлю README.
Т.е. для хеширования файла потоково нужно написать что-то в стиле, грубо говоря

import cityhash
with open("filename", "r") as f:
    chunk=f.read(5120)
    hash=cityhash.CityHash64(chunk)
    chunk=f.read(5120)
    while chunk:
        hash=cityhash.CityHash64WithSeed(chunk, hash)
        chunk=f.read(5120)

assert hash==cityhash.CityHash64(open("filename", "r").read())


Если да, то есть смысл написать обертку в стиле hashlib (с методом update)
Эта программа падает кстати, говорит
/usr/local/lib/python2.6/dist-packages/cityhash.so in cityhash.CityHash64WithSeed (cityhash.cpp:719)()

OverflowError: long int too large to convert to int
Действительно, падает. Спасибо за репорт, поправлено.
Т.е. для хеширования файла потоково нужно написать что-то в стиле, грубо говоря

Именно так.

Если да, то есть смысл написать обертку в стиле hashlib (с методом update)

Отличная идея, только вот думаю, подождать пока Google включат в CityHash что-то подобное или написать самому.
Sign up to leave a comment.

Articles