当前位置:   article > 正文

Python进行批量字符替换的3种方法_pyhton怎么一键替换代码中的

pyhton怎么一键替换代码中的

一、问题的提出

之前,我写过一篇如何在word中计算数学算式:

如何用Python批量计算Word中的算式-CSDN博客

为了计算算式,就需要对算式进行格式化,把不规则的算式转换成规则的算式,这时就会涉及到一些字符的批量替换。如我们把算式:

1.3×14×2×[1+(76-50)/120]

转换成下面的规则算式,这样才能让Python中的eval()函数进行计算。

1.3*14*2*(1+(76-50)/120)

那么,如何把这里面的乘号替换成星号,把方括号替换中圆括号呢?这里我们采用下面的3种方法,通过python来实现。

二、批量字符替换的方法

1. replace法

利用replace函数,对于字符串中的三个字符进行多次替换,不需要导入其它的包,可以一次替换完成,并通过eval和round打印出保留2位小数后的结果,代码如下:

  1. #replace法
  2. s = "1.3×14×2×[1+(76-50)/120]"
  3. if "×" or "[" in s:
  4. s = s.replace("×","*").replace("[","(").replace("]",")")
  5. print(round(eval(s),2))

2. 字典法

我们可以制作一个替换用的字典,通过Python循环字典,对于符合要求的字符进行检测,如果在字典里可以查询到,就进行替换。

  1. # 字典法
  2. dic = {"x":"*","[":"(","]":")"}
  3. for k,v in dic.items():
  4. s.replace(k,v)
  5. print(round(eval(s),2))

以上是遍历的字典,只需要循环3次即可,下面我还可以通过利用字典+列表推导式的形式实现。这里主要采用了字典的get()方法,替换转换为列表后的字符,然后再用join()函数合成。

  1. s = "1.3×14×2×[1+(76-50)/120]"
  2. dic = {"x":"*","[":"(","]":")"}
  3. s = [dic.get(i,i) for i in s] #也可以使用这个列表推导式实现。
  4. s = "".join(s)
  5. print(round(eval(s),2))

3. maketrans法

用maketrans生成映射表,然后用translate进行批量替换,代码如下:

  1. #maketrans映射法
  2. s = "1.3×14×2×[1+(76-50)/120]"
  3. intab = "×[]"
  4. outtab = "*()"
  5. transtab = str.maketrans(intab,outtab)
  6. s = s.translate(transtab)
  7. print(round(eval(s),2))

4. 效果展示

以下是在thonny中运行的效果展示:

字符替换效果展示

三、学后反思

  1. 三种方法都可以高效地实现替换,第一种最常见,第二种思路最清晰,第三种使用起来更简单一些。
  2. 考虑到制作字典比较麻烦,可以采用第三种方法,或者用zip()把两个字符列表组合成字典,再采用第二种方法进行替换。
  3. 第一种方法不太适用于3个以上字符的替换,那样代码量多,而且写起来比较复杂,建议采用第二种和第三种方法来解决。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/212155
推荐阅读
相关标签
  

闽ICP备14008679号