更快地解码类似URL的字符串

时间:2016-06-24 13:49:14

标签: regex python-3.x urllib

我有几GB的数据编码在不同的xml文件中。由于某些原因,生成这些xml文件的(闭源)程序使用类似URL的表示来编码文本,例如, '08.06.2016 22:41:35'变为08%2E06%2E2016%2022%3A41%3A35

我感兴趣的数据中通常有空格,(十进制)点和冒号,但我需要将代码保持为任何十六进制表示。

目前,我正在使用urllib.parse.unquote。但速度非常慢:使用分析器我发现我的数据挖掘算法花费的时间占{0}归因于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)
  

取消引用时间:0.12173581222984353

     

更换时间:0.009713842143412421

我可以尝试用替换来链接我所知道的所有十六进制,但我仍然害怕错过一些东西。 我试图使用re.sub或类似的但是我没有成功:取代'%'并非如此微不足道。由' \ x'。

有什么想法吗?

我使用的是Python 3.5

1 个答案:

答案 0 :(得分:1)

我认为在纯Python中可以更快地完成很多,但unquote_to_bytes在我的机器上提供了大约2倍的加速:

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