2016-06-24 9 views
0

私は数GBのデータを別のXMLファイルにエンコードしています。いくつかの理由から、これらのxmlファイルを生成する(クローズドソース)プログラムは、テキストをURLのような表現でエンコードします。 '08.06.2016 22:41:35'08%2E06%2E2016%2022%3A41%3A35URLのような文字列をもっと早くデコードしてください

です。興味のあるデータには大部分がスペース、小数点、コロンがありますが、コードを任意の種類の16進表記にしておく必要があります。

今のところ私はurllib.parse.unquoteを使用しています。しかし、非常に遅いです:プロファイラを使用して私のデータマイニングアルゴリズムで費やされた時間の90%がurllib.parse.unquoteに起因することがわかりました。あなたはそれが交換と比較する方法を以下に見ることができます。

from urllib.parse import unquote 
from time import clock 

t0=clock() 
for i in range(10000): 
    unquote('08%2E06%2E2016') 
t1=clock() 

t2=clock() 
for i in range(10000): 
    '08%2E06%2E2016'.replace('%2E','\x2E') 
t3=clock() 

print('unquote time: ',t1-t0,'\nreplace time: ',t3-t2) 

にunquote時間:0.12173581222984353

時間置き換える:0.009713842143412421

を私はチェーンに私が交換すると知っているが、私はまだ何かを欠場する怖いすべての六角を試みることができます。 re.subなどを使用しようとしましたが、私は失敗しました。 '%'を '\ x'で置き換えるのはそれほど簡単ではありません。

私は、Python 3.5を使用してい

答えて

1

が、私はそれが純粋なPythonでずっと迅速に行うことができるとは思いませんが、unquote_to_bytesは私のマシン上で約2倍の高速化を提供します:これは、部分的に答え

from urllib.parse import unquote_to_bytes 
unquote_to_bytes('08%2E06%2E2016').decode() 
+0

私の質問は、それを2で割ったものです。より良い答えが出てこない場合、私はそれを「答え」にアップグレードします。おかげで、すでに良い結果になっています:) – Wli

+0

processusを高速化するには、抽出したい行ごとにunquote_to_bytesをXML全体に対して一度実行する方が良いでしょう。 – Wli

関連する問題