![](/img/trans.png)
[英]How to check if a string contains a specific character or not in python
[英]How to replace a string that contains a specific character in python?
我正在尝试使用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 '))
我将这一行分开,将包含“ e-”的任何元素替换为“ 0.0”,然后重新加入它:
fout.write(' '.join(['0.0' if 'e-' in x else x for x in line.split(' ')]))
我的建议是以类似于以下方式使用正则表达式模块:
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
您可以调整程序以适合您的特定需求。
在最后一行之前添加以下两行。
contents = [x.replace("e-", '0.0') for x in line.split()]
fout.write(' '.join(contents) + '\n')
它的作用是每当遇到空格时就将line
分割开,并在每段中应用replace
方法。 在这里,我们利用了以下事实:即使我们要查找的子字符串不在开头的字符串中, replace
也可以使用。 修改线条后,我们将其缝合在一起,添加换行符并将其写入文件。
您也可以使用正则表达式 ,尽管在这种情况下它可能会显得过大。
import re
fout.write(re.sub(r"[\d.]+e-\d+", "0.0", line))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.