结论

先说结果, 直接替换是最好的. replace 一层层用, 方法笨了一点, 还可以.

懒得打字, 贴代码就完事了.

基准测试1

from cProfile import run

s = '1 a  2 \n \t \r e34234'

def _replace():
for x in range(5000000):
old_value2 = s.replace('\t', '')
old_value3 = old_value2.replace('\n', '')
old_value3.replace('\r', '') def _replace3():
for x in range(5000000):
old_value2 = s.replace('\t', '\\t')
old_value3 = old_value2.replace('\n', '\\n')
old_value3.replace('\r', '\\r') def _translate1():
for x in range(5000000):
s.translate(str.maketrans({'\t': '', '\n': '', '\r': ''})) t2 = str.maketrans({'\t': '', '\n': '', '\r': ''})
t3 = str.maketrans({'\t': None, '\n': None, '\r': None})
t4 = str.maketrans({'\t': '\\t', '\n': '\\n', '\r': '\\r'}) def _translate2():
for x in range(5000000):
s.translate(t2) def _translate3():
for x in range(5000000):
s.translate(t3) def _translate4():
for x in range(5000000):
s.translate(t4) print('### replace')
run("_replace()")
print('### replace3')
run("_replace3()")
print('### translate1')
run("_translate1()")
print('### translate2')
run("_translate2()")
print('### translate3')
run("_translate3()")
print('### translate4')
run("_translate4()")

速度: _replace > translate3 > _replace3 > translate2 > translate1 > translate4

结论: translate是个辣鸡~~

运行结果:

### replace
15000004 function calls in 4.451 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 4.451 4.451 <string>:1(<module>)
1 1.721 1.721 4.451 4.451 demo.py:7(_replace)
1 0.000 0.000 4.451 4.451 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
15000000 2.730 0.000 2.730 0.000 {method 'replace' of 'str' objects} ### replace3
15000004 function calls in 4.785 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 4.785 4.785 <string>:1(<module>)
1 1.830 1.830 4.785 4.785 demo.py:14(_replace3)
1 0.000 0.000 4.785 4.785 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
15000000 2.956 0.000 2.956 0.000 {method 'replace' of 'str' objects} ### translate1
10000004 function calls in 7.741 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 7.741 7.741 <string>:1(<module>)
1 1.870 1.870 7.741 7.741 demo.py:21(_translate1)
1 0.000 0.000 7.741 7.741 {built-in method builtins.exec}
5000000 1.052 0.000 1.052 0.000 {built-in method maketrans}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 4.819 0.000 4.819 0.000 {method 'translate' of 'str' objects} ### translate2
5000004 function calls in 5.284 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 5.284 5.284 <string>:1(<module>)
1 0.702 0.702 5.284 5.284 demo.py:31(_translate2)
1 0.000 0.000 5.284 5.284 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 4.582 0.000 4.582 0.000 {method 'translate' of 'str' objects} ### translate3
5000004 function calls in 3.548 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.548 3.548 <string>:1(<module>)
1 0.720 0.720 3.548 3.548 demo.py:36(_translate3)
1 0.000 0.000 3.548 3.548 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 2.828 0.000 2.828 0.000 {method 'translate' of 'str' objects} ### translate4
5000004 function calls in 5.751 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 5.751 5.751 <string>:1(<module>)
1 0.722 0.722 5.751 5.751 demo.py:41(_translate4)
1 0.000 0.000 5.751 5.751 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
5000000 5.029 0.000 5.029 0.000 {method 'translate' of 'str' objects}

基准测试2

时间消耗:

  • tx2 < tx3 < tx1 < tx4
  • t2 < t3 < t1 < t4

a = '你好的\r\n打分a\r\tdeadaaes\r\n\tttttrb' k = ('\r', '\n', '\t') def t1(text):
for ch in k:
if ch in text:
text = text.replace(ch, ' ')
return text def t2(old_value1):
# data reformat
old_value2 = old_value1.replace('\t', ' ')
old_value3 = old_value2.replace('\n', ' ')
return old_value3.replace('\r', ' ') def t3(old_value):
# data reformat
old_value = old_value.replace('\t', ' ')
old_value = old_value.replace('\n', ' ')
return old_value.replace('\r', ' ') def t3_1(old_value):
# data reformat
return old_value.replace('\r', ' ').replace('\t', ' ').replace('\n', ' ') def t4(s):
t = s.maketrans("\n\t\r", " ")
return s.translate(t) def tx1(x):
for i in range(0, 100000):
t1(x) def tx2(x):
for i in range(0, 100000):
t2(x) def tx3(x):
for i in range(0, 100000):
t3(x) def tx3_1(x):
for i in range(0, 100000):
t3_1(x) def tx4(x):
for i in range(0, 100000):
t4(x) tx1(a)
tx2(a)
tx3(a)
tx3_1(a)
tx4(a)

Profile:

https://stackoverflow.com/questions/3411771/best-way-to-replace-multiple-characters-in-a-string

Python 字符串多替换时性能基准测试的更多相关文章

  1. python字符串内容替换的方法(转载)

    python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法.   ...

  2. Python - 字符串的替换(interpolation) 具体解释

    字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...

  3. python 字符串中替换字符

    今天本来打算写个程序,替换字符串中固定的一个字符:将<全部替换成回车'\n' 于是,我写成这样 s='sdjj<ddd<denj,>' for x in s: if x=='& ...

  4. python字符串replace失效问题

    python字符串replace替换无效 背景 今天想把一个列表中符合条件的元素中 替换部分字符串, 发现怎么替换,改元素还是没有改变,本以为是内存引用的问题后来发现并不然. 经查阅解决 在Pytho ...

  5. StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing the strings?

    StackOverFlow排错翻译 - Python字符串替换: How do I replace everything between two strings without replacing t ...

  6. Python - 字符串模板的安全替换(safe_substitute) 具体解释

    字符串模板的安全替换(safe_substitute) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27057339 ...

  7. Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接

    Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接 字符串是Python中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符 ...

  8. python 字符串替换

    字符串替换可以用内置的方法和正则表达式完成.1用字符串本身的replace方法: a = 'hello word'b = a.replace('word','python')print b 2用正则表 ...

  9. python字符串替换的2种有效方法

    python 字符串替换可以用2种方法实现:1是用字符串本身的方法.2用正则来替换字符串 下面用个例子来实验下:a = 'hello word'我把a字符串里的word替换为python1用字符串本身 ...

随机推荐

  1. Transformer---GPT模型

    一.GPT(Generative Pre-Training) GPT-2的模型非常巨大,它其实是Transformer的Decoder.GPT-2是Transformer的Decoder部分,输入一个 ...

  2. 0.Jenkins 介绍

    一.持续集成的概念 continuous  intergaration  (简称CI),持续集成. 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味 ...

  3. Springboot配置ssl使用https

    SSL(Secure Sockets Layer 安全套接层)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络连接进行加密,SSL协议位于TCP/IP协议与各种应用层协议之间, ...

  4. Excel-基本操作

    一.EXCEL的数据类型 1.字符型 2.数值型 3.日期型数据和时间型数据 二.快捷键 ctrl+上下左右健 快速选择某区域  上下左右单元格 ctrl+shift+上下左右 快速选择某个取悦 三. ...

  5. [LeetCode] 647. Palindromic Substrings 回文子字符串

    Given a string, your task is to count how many palindromic substrings in this string. The substrings ...

  6. [LeetCode] 62. Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  7. 从excel中转存sql

    1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  8. 喜欢去知乎炸鱼?用python吧

    知乎高赞贴: 有一双大长腿是什么体验? 有一副迷人的身材是什么体验? 别用手机费劲的翻了,python帮你一臂之力 import re import requests import os import ...

  9. Django 数据库同步命令

    版本1.8.2 检查数据库配置是否有错 Python manage.py validate/check 创建对应书看的映射语句 Python manage.py makemigrations 同步或者 ...

  10. docker搭建php环境

    前言 本文根据参考文章,自己动手试了搭建PHP环境,对里面的Dockerfile的编写 做了最新的修改,以此记录,完整代码查看传送门 说明: 镜像下载过慢,可使用国内镜像加速,具体可自行查询 根据此方 ...