我有大量的文本,包括\ n \ t和\ r \ n等控制字符。 我需要用简单的空间替换它们 - > “”。最快的方法是什么? 感谢
答案 0 :(得分:24)
我认为最快的方法是使用str.translate()
:
import string
s = "a\nb\rc\td"
print s.translate(string.maketrans("\n\t\r", " "))
打印
a b c d
编辑:由于这再次变成了关于性能的讨论,这里有一些数字。对于长字符串,translate()
方式比使用正则表达式更快:
s = "a\nb\rc\td " * 1250000
regex = re.compile(r'[\n\r\t]')
%timeit t = regex.sub(" ", s)
# 1 loops, best of 3: 1.19 s per loop
table = string.maketrans("\n\t\r", " ")
%timeit s.translate(table)
# 10 loops, best of 3: 29.3 ms per loop
这大约是40倍。
答案 1 :(得分:9)
您也可以尝试使用正则表达式:
import re
regex = re.compile(r'[\n\r\t]')
regex.sub(' ', my_str)
答案 2 :(得分:5)
>>> re.sub(r'[\t\n\r]', ' ', '1\n2\r3\t4')
'1 2 3 4'
答案 3 :(得分:3)
如果要规范化空格(用一个空格替换一个或多个空格字符的运行,并去掉前导和尾随空格),可以使用字符串方法来完成:
>>> text = ' foo\tbar\r\nFred Nurke\t Joe Smith\n\n'
>>> ' '.join(text.split())
'foo bar Fred Nurke Joe Smith'
答案 4 :(得分:2)
使用正则表达式
re.sub(r'\s+', ' ', '1\n2\r3\t4')
没有正则表达式
>>> ' '.join('1\n\n2\r3\t4'.split())
'1 2 3 4'
>>>
答案 5 :(得分:1)
' S'是要删除特定控制字符的字符串。 由于字符串在python中是不可变的,因此在替换操作之后,您需要将其分配给另一个字符串。
s = re.sub(r' [\ n \ r \ t] *','',s)