replace()最快删ASCII空格但不处理制表符、换行符及全角空格;re.sub()可统一清除所有Unicode空白包括全角空格;translate()速度最快但需预定义字符集;split()+join()会丢失原始分隔结构且性能差。
replace() 最快去掉所有空格,但要注意它不处理制表符和换行符如果只是想把普通空格(ASCII 32)全删掉,replace() 是最直接的选择,性能也最好。它不会动其他空白字符,比如 \t、\n、\r,这点要心里有数。
"hello world".replace(" ", "") → "helloworld"
"你好 世界".replace(" ", "") 保留全角空格(U+3000)replace() 不推荐,比如 .replace(" ", "").replace("\t", ""),可读性差且效率低re.sub() 精确控制“哪些空白要删”,适合复杂清洗场景当你要统一清除所有 Unicode 空白字符(包括空格、制表、换行、全角空格、不间断空格等),正则更可靠。关键是别写错模式 —— \s 匹配所有空白,但默认不包含全角空格;要覆盖更广,得显式列出或用 [\s\u3000]。
import re
def remove_all_whitespace(s):
return re.sub(r'[\s\u3000]+', '', s) # \s + 中文全角空格
re.sub(r'\s+', '', s) 能删 \t\n\r\f\v,但对 (U+3000)无效re.UNICODE 标志在 Python 3 中通常不需要,因为默认已启用RE_WHITESPACE = re.compile(r'[\s\u3000]+')
str.translate() 去除固定字符集,速度最快但灵活性低如果你明确只删空格、制表、换行这几种,且追求极致性能(比如处理 GB 级日志),translate() 比 replace() 和正则都快。但它不能写逻辑,只能靠查表映射。
WHITESPACE_TABLE = str.maketrans('', '', ' \t\n\r\f\v\u3000')
def remove_whitespace_fast(s):
return s.translate(WHITESPACE_TABLE)
maketrans() 第三个参数是“要删除的字符”,传字符串即可maketrans() 接口不同,上面写法仅适用于 Python 3maketrans()
split() + join(),它会连多个空格之间的语义也抹掉常见误区是写 ' '.join(s.split()) 或 ''.join(s.split())。前者压缩空格成单个,后者看似去空格,实则会把所有空白(包括换行)全转成空字符串再拼,中间无分隔 —— 看似结果对,但逻辑错位,且性能差。
"a\tb\n c".split() → ['a', 'b', 'c'],原始分隔信息彻底丢失split() 会跳过它们,无法还原原始结构意图replac
e() 慢至少 2–3 倍,还多一次列表创建和遍历真正需要“去掉空格”时,先问清楚:只要 ASCII 空格?还是要清掉所有空白?是否保留原始分隔语义?选错方法,后面 debug 时才发现数据被静默破坏,就晚了。