我有几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
答案 0 :(得分:1)
我认为在纯Python中可以更快地完成很多,但unquote_to_bytes
在我的机器上提供了大约2倍的加速:
from urllib.parse import unquote_to_bytes
unquote_to_bytes('08%2E06%2E2016').decode()