大きなファイルを操作するPythonコードがいくつかあります。それらのいくつかでは、私は列間で操作を実行したり、それらの内容を選択したりします。入力ファイルはさまざまな構造を持つことができるため、この操作c3 + c5 -1
または(c3<4) & (c5>4)
(または組み合わせ)のような構文のコマンドラインを介して操作が提供されます。入力ファイルの4番目の列c4
として解釈されます。
私のファイルは次のようになります('input_file.txt'):
21.3 4321.34 34.12 4 343.3 2 324
34.34 67.56 764.45 2 54.768 6 45265
986.96 87.98 234.09 1 54.456 3 5262
[...]
列4と列5を合計し、1
を減算するとします。
import re
import numpy as np
operation = "c3 + c5 -1" #in reality given from command line
pattern = re.compile(r"c(\d+?)") # compile the regex that matches the column number
# get the actual expression to evaluate
to_evaluate = pattern.sub("ifile[:,\\1]", operation)
#to_evaluate is: "ifile[:,3] + ifile[:,5] -1"
ifile = np.loadtxt('input_file.txt')
result = eval(to_evaluate) #evaluate the operation required
print(result)
# do the rest
出力
[5、7、3、...]
私はこの実装を思いついたのは:
- ファイルの読み取り方法を変更したい場合(現時点ではまたはを使用することを決定できます)、または操作を追加したい場合は、書き込みと変更が簡単
numpy
ですpandas
。 - 私にできることについて多くの自由を与えてくれます。
c3 + c5 -1
私は、(c3<4) & (c5>4)
または(c2+c4)>0
同じように扱うことができます。 - 私はすべてのコードで同じ署名を持っています:間違いを犯す可能性が低いです
これは安全ではない可能性があり(今のところ私がこれらのコードの唯一のユーザーですが)、対応するコードよりも遅くなる可能性があることを認識してeval
いますが、これ以上の方法は考えられませんでした。
そのような操作を実装するためのより良い/より安全な方法を知っている人はいますか?
追加の編集:重要な場合は、Python2.7を実行しています