さらに下を見る:
編集しようとしている非常に長い文字列に変換したリストがあります。収集できるように、それは tempString と呼ばれます。おそらくいくつかの異なる正規表現サブルーチンであるため、動作するのに時間がかかります。それらは次のとおりです。
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)
基本的には、コンマと 4 つの float/int の約 100 万から 500 万セット (両方の混合が可能) を含む長い文字列です。
-5.65500020981,6.88999986649,-0.454999923706,1,,,-5.65500020981,6.95499992371,-0.454999923706,1,,,
各セットの 4 番目の数字は必要ありません/必要ありません。基本的には、文字列をスペースで区切られた 3 つのフロートを持つリストに分割しようとしています。
上記のコードは問題なく動作しますが、ご想像のとおり、大きな文字列ではかなり時間がかかります。
私は解決策のためにここで多くの調査を行いましたが、それらはすべて単語に向けられているようです。つまり、ある単語を別の単語に置き換えています。
編集: わかりましたので、これは私が現在使用しているソリューションです:
def getValues(s):
output = []
while s:
# get the three values you want, discard the 3 commas, and the
# remainder of the string
v1, v2, v3, _, _, _, s = s.split(',', 6)
output.append("%s %s %s" % (v1.strip(), v2.strip(), v3.strip()))
return output
coords = getValues(tempString)
これをさらに高速化するためのアドバイスはありますか? いくつかのテストを実行した後でも、私が望んでいるよりもはるかに時間がかかります。
私はnumPyをちらっと見てきましたが、正直なところ、上記を使用する方法がまったくわかりません。上記が行われ、値がクリーンアップされた後、numPyでより効率的に使用できることを理解していますが、方法がわかりませんNumPy は上記に適用できます。
上記の 50,000 セットをクリーンアップするには約 20 分かかります。100 万セットの完全なストリングでどれくらいかかるか想像できません。最初にデータをエクスポートしたプログラムが、100 万セットに対して約 30 秒しかかからなかったことは驚くべきことです。