2016-11-08 11 views
1

私は、テキストファイルを通過し、部分文字列 "e-"を含むすべての文字列を "0.0"に置き換えるためにpythonを使用しようとしています。例えばPythonで特定の文字を含む文字列を置き換える方法は?

は、行に:

0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598

"3.5637e-0" 0.0によって置き換えられます。 "e-"を囲む数字は、必ずしもそれぞれの出現で同じではありません。可能であれば、私は以下のコードを変更したい

(ここで、「 - 」「-99」に置き換えられます)これを行うには、私は同様に、他の提案を開いています:

with open(outputfile, "wt") as fout: 
    with open(datafile, "rt") as fin: 
     for line in fin: 
      fout.write(line.replace('- ', '-99 ')) 

答えて

3

私はそれを「0.0」と「E-」を含むすべての要素を置き換え、行を分割し、再度参加したい:それは、この例ではやり過ぎかもしれないが

fout.write(' '.join(['0.0' if 'e-' in x else x for x in line.split(' ')])) 
0

あなたの最後の行の前に次の2行を追加してください。

contents = [x.replace("e-", '0.0') for x in line.split()] 
fout.write(' '.join(contents) + '\n') 

これがないと、スペースが出会い、すべての部分でreplace方法を適用するたびに、それはlineとを分離していることです。ここでは、replaceが、探している部分文字列が最初に文字列に含まれていなくても機能するということを利用しています。行を修正した後、それをつなぎ合わせて改行してファイルに書き出します。

0

あなたはまた、regular expressionを使用することができます。

import re 

fout.write(re.sub(r"[\d.]+e-\d+", "0.0", line)) 
1

私の提案と同様に、正規表現モジュールを使用することです。(私は以下の内容

0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

でファイルを作成した場合

import re 
import sys 

def process_file(src, dst=sys.stdout): 
    for line in src: 
     dst.write(re.sub("\d+\.\d+e\-\d+", "0.0", line)) 

def main(paths): 
    for path in paths: 
     with open(path, "rb") as fp: 
      process_file(fp) 

if __name__ == "__main__": 
    sys.exit(main(sys.argv[1:])) 

と、プログラムを実行しますexample.pyとする)

$ python example.py test.txt test.txt 

私はあなたの特定のニーズに合わせてプログラムを適応させることができ、次の出力

0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598 

を取得します。

関連する問題