往下看:
我有一个列表,当我试图编辑它时,我把它转换成一个很长的字符串,因为你可以收集到它叫做tempString。它现在起作用只是需要很长时间才能运行,可能是因为它是几个不同的regex sub。具体如下:
tempString = ','.join(str(n) for n in coords)
tempString = re.sub(',{2,6}', '_', tempString)
tempString = re.sub("[^0-9\-\.\_]", ",", tempString)
tempString = re.sub(',+', ',', tempString)
clean1 = re.findall(('[-+]?[0-9]*\.?[0-9]+,[-+]?[0-9]*\.?[0-9]+,'
'[-+]?[0-9]*\.?[0-9]+'), tempString)
tempString = '_'.join(str(n) for n in clean1)
tempString = re.sub(',', ' ', tempString)
基本上,它是一个长字符串,包含逗号和大约100-500万组4个浮点/整数(两者都有可能混合):
^{pr2}$我不需要/不想要的每个集合中的第四个数字,我基本上只是尝试将字符串拆分成一个列表,每个列表中有3个浮点数,每个浮点数用空格隔开。在
上面的代码可以完美地工作,但是正如您所想象的那样,在大型字符串上相当耗时。在
我在这里做了很多研究来寻找一个解决方案,但它们似乎都倾向于用词,即用一个词换另一个词。在
编辑: 好的,这就是我目前使用的解决方案:
^{3}$有没有人有什么建议可以把这个速度再加快一点?在运行了一些测试之后,它仍然需要比我期望的长得多的时间。在
我一直在浏览numPy,但老实说,我完全不知道如何使用它上面的内容,我理解在完成了上面的操作并清理了这些值之后,我可以更有效地使用numPy,但不确定numPy如何应用于上面的内容。在
上面所说的清理5万台需要20分钟左右,我无法想象在我的100万台整串设备上要花多长时间。我只是惊讶于最初导出数据的程序在100万套数据中只花了30秒左右
根据您的样本数据:
…一旦将这些解析后的值作为字符串放入列表中,您就可以执行任何其他需要执行的操作。在
或者,如果愿意,可以使用生成器,这样就不需要一次生成整个返回字符串:
^{pr2}$您可能还想尝试一种方法,在
,,,
一组逗号上预拆分长列表,而不是不断地构建和处理一组较短的字符串,例如:在某种程度上,当你处理像这样的大数据集并且有速度问题时,把事情向下推到在C中做艰苦工作的模块,比如NumPy,是有意义的。在
减少内存消耗而不必更改regex中的任何内容的一种方法是使用
re.finditer()
方法而不是re.findall()
。这将逐个迭代这些值,而不是将整个字符串读入单个列表对象。http://docs.python.org/library/re.html#re.finditer相关问题 更多 >
编程相关推荐