如何在python中替换包含特定字符的字符串?

时间:2016-11-08 17:48:19

标签: python string

我正在尝试使用python来浏览文本文件并替换包含子字符串的所有字符串" e - "用" 0.0"。

例如,在行中:

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 '))

4 个答案:

答案 0 :(得分:3)

我将该行拆分,将包含“e-”的任何元素替换为“0.0”并重新加入:

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

答案 1 :(得分:1)

我的建议是以类似于:

的方式使用正则表达式模块
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:]))

如果我创建一个包含以下内容的文件

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

运行程序(名为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

您可以调整程序以满足您的特定需求。

答案 2 :(得分:0)

在最后一行之前添加以下两行。

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

这样做是在满足空格时分割line并在每个部分中应用replace方法。在这里,我们利用replace也可以工作的事实,即使我们要查找的子字符串不在字符串中。修改线后,我们将它拼接在一起,附加换行符并将其写入文件。

答案 3 :(得分:0)

您也可以使用regular expression,但在这种情况下可能有点过分。

import re

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