2016-10-29 12 views
1

urlに基づいてファイルにhtmlを保存します。ユニークなファイル名を短くする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モジュールを使用し、それは(base64ではasciiですので、動作します)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

は '.replace( '/'、 '_')'必要があります?。 base64に変換してuuidstringを実行している間に '/'が存在しますか? – Rahul

+0

例えば 'base64.encodebytes(b" ??? ")で'/'を得ることができます。削除する必要のある別の文字があります: '+'。あなたの文字列 'a6f100f6-a39d-5fc0-8e63-225ff3383344'では、あなたが正しいとは思えません。なぜなら、あなたは1ビット以下のものをたくさん必要とするからです。ありがとう。 –

+0

ありがとう。大規模なデータセットを確認し、それに応じて更新します。 – Rahul

関連する問題