Python3:从文件读取含转义序列字符串与代码定义表现差异问题
解决读取文本文件后空格显示不一致的问题
这个问题我碰到过!核心原因是你文件里的空格不是普通的半角空格,而是不间断空格(Non-breaking Space,对应转义字符\xa0),而你直接在代码里定义字符串时用的是标准半角空格(ASCII 32),所以两者打印出来的视觉效果不一样。
先验证问题根源
你可以用repr()函数查看两个字符串的真实内容,就能直观看到差异:
# 读取文件的字符串 s_file = open("1.txt").read() print(repr(s_file)) # 会看到包含 `\xa0` 的输出,比如 'who is the\xa0winners\xa0where\xa0season result\xa0is 7th' # 直接定义的字符串 s_code = "who is the winners where season result is 7th" print(repr(s_code)) # 输出是 'who is the winners where season result is 7th'
三种实用解决方法
方法1:直接替换不间断空格
最简单直接的方式,把文件读取到的\xa0直接替换成普通空格:
s = open("1.txt").read().replace('\xa0', ' ') print(s) # 输出就和直接定义的字符串完全一致了
方法2:用Unicode标准化统一字符
如果文件里还存在其他特殊空白字符(比如全角空格),可以用unicodedata模块的标准化功能,把所有兼容性等价的字符转换成标准形式:
import unicodedata s = unicodedata.normalize("NFKC", open("1.txt").read()) print(s)
NFKC模式会自动把所有类似不间断空格的特殊兼容字符转换为标准半角空格,还能处理其他类型的特殊字符兼容问题。
方法3:正则表达式替换所有空白字符
如果想一次性处理所有类型的空白字符(包括制表符、换行符、各种特殊空格),可以用正则表达式统一替换:
import re s = re.sub(r'\s', ' ', open("1.txt").read()) print(s)
\s会匹配所有Unicode定义的空白字符,然后统一替换成普通半角空格,适合复杂的空白场景。
内容的提问来源于stack exchange,提问作者이동준
相关产品推荐
相关产品推荐

