Найти - Пользователи
Полная версия: Проверка на повторяемость уникального кода...
Начало » Центр помощи » Проверка на повторяемость уникального кода...
1 2
vasyank
Shaman
Почему именно uuid4?
ну в нем разобрался потому что,(точне там разбираться не в чем). Срезы научился через randint генерировать. Но с ужасом заметил что нету верхнего регистра
Вся задача с созданием класса и обработкой входящего *.csv файла занимает в строчках в 15 раз больше места) А я 2й день мучаюсь над генерацией хеш кода
Shaman
uuid4 ничем не отличается от первоначального варианта, со всеми причитающимися.

def uuid4():
    """Generate a random UUID."""
    # When the system provides a version-4 UUID generator, use it.
    if _uuid_generate_random:
        _buffer = ctypes.create_string_buffer(16)
        _uuid_generate_random(_buffer)
        return UUID(bytes=_buffer.raw)
    # Otherwise, get randomness from urandom or the 'random' module.
    try:
        import os
        return UUID(bytes=os.urandom(16), version=4)
    except:
        import random
        bytes = [chr(random.randrange(256)) for i in range(16)]
        return UUID(bytes=bytes, version=4)
vasyank
Shaman
uuid4 ничем не отличается от первоначального варианта, со всеми причитающимися.
тоесть рандом любого рода не гарантирует уникальность?) Все сдаюсь
И все таки как выглядит код для проверки уникальности? Я вообще понимаю, что вероятность повтора хеша с такими условиями стремиться к 0. Но задача есть задача
GreyZmeem
import string
import random
 
 
class _A(object):
	def __init__(self, name, hash_code):
		self.name = name
		self.hash_code = hash_code
 
 
class A(object):
	current_hashes = set()
 
	@classmethod
	def generate_hash_code(cls):
		while True:
			hash_code = ''.join([random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(random.randint(10, 15))])
			if hash_code not in cls.current_hashes:
				cls.current_hashes.add(hash_code)
				return hash_code
 
	def __new__(cls, *args, **kwargs):
		hash_code = cls.generate_hash_code()
		kwargs.update({'hash_code': hash_code})
		return _A(*args, **kwargs)
 
 
print A('Test').hash_code
print A('Test').hash_code
print A('Test').hash_code
print A('Test').hash_code
print A('Test').hash_code
print 'Current hashes:', A.current_hashes
hdPhslOit2uRCZ
OJiLbln6dl8Ru
R4ghafikMex94
ktmsfG3yRD
VIflbXYnvqw4RC
Current hashes: set(['ktmsfG3yRD', 'VIflbXYnvqw4RC', 'OJiLbln6dl8Ru', 'R4ghafikMex94', 'hdPhslOit2uRCZ'])
vasyank
о класс надо придумать как это в 3й питон перевести, а еще что будет если generate_hash_code словит фолс?
GreyZmeem
vasyank
а еще что будет если generate_hash_code словит фолс?
Пойдет на следующую интерацию while. И так, пока не найдет уникальный hash. Вы можете поставить какой-то счетчик, и если за это количество циклов ничего не найдено, кидать exception.
vasyank
Спасибо всем! Последний предложенный код адаптировал на 3 питон, и функцию для кода по рекомендации Пайчарма, сделал статичной- все работает) set() и while True мего круто) Осталось для меня только не познанным что случиться с сетом() после выполнения программы Ну это уже по сути не важно
py.user.next
Я бы взял id() объекта и нашёл для этого значения md5.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB