2016-10-29 4 views
1

Я хочу сохранить html в файл на основе URL-адреса.кодировка url для короткого уникального имени файла

Чтобы получить уникальное имя для URL-адреса, я использую uuid.

>>> url = "https://www.google.co.in/?gfe_rd=cr&ei=-koUWPf4HqzT8ge2g6HoBg&gws_rd=ssl" 
>>> uuidstring = str(uuid.uuid5(uuid.NAMESPACE_DNS, url)) 

, но я хочу и далее укоротить название. Есть ли способ сократить строку до уникальной маленькой строки.

Я пробовал base64, но я не мог понять.

>>> uuid.UUID(uuidstring).bytes.encode('base64').rstrip('=\n').replace('/', '_') 
>>> AttributeError: 'bytes' object has no attribute 'encode' 

связан вопрос: Convert UUID 32-character hex string into a "YouTube-style" short id and back

ответ

2

base64 Используйте модуль, как это, он может обрабатывать двоичные данные, а затем выполнить декодирование как ascii (будет работать, так как это base64 ASCII).

import uuid,base64 

url = "https://www.google.co.in/?gfe_rd=cr&ei=-koUWPf4HqzT8ge2g6HoBg&gws_rd=ssl" 
uuidstring = str(uuid.uuid5(uuid.NAMESPACE_DNS, url)) 
z=base64.encodebytes(uuid.UUID(uuidstring).bytes).decode("ascii").rstrip('=\n').replace('/', '_') 
print(z) 

результат:

pvEA9qOdX8COYyJf8zgzRA 
+0

является '.Надеть ('/', '_')' необходимо ?. будет ли когда-либо присутствовать '/' при преобразовании и uuidstring в base64? – Rahul

+0

можно получить '/', например, с 'base64.encodebytes (b" ??? ")'. Есть еще один символ, который вам может понадобиться: '+'. но с вашей строкой 'a6f100f6-a39d-5fc0-8e63-225ff3383344' вряд ли вы правы, так как вам понадобится много следующих 1 бит. –

+0

спасибо. Я проверю на большой набор данных и обновление соответственно. – Rahul

Смежные вопросы