[5分钟解决]python的字符串前面加r、b、u、f的含义
[5分钟解决]python的字符串前面加r、b、u、f的含义
为什么要研究这个呢?因为Python的字符串格式化功能经历了多次演进,形成了多种不同的方法。但是研究那个没意义,只要你理解了这几个字符的含义,然后再去这个框架下理解那些易如反掌!
- 破解【python2和python3的一个细节不一样】在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:由于Python的字符串类型是
str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
| 前缀 | 含义 | Python版本 | 主要用途 |
|---|---|---|---|
| r | 原始字符串 | 2/3 | 正则表达式、文件路径、避免转义 |
| b | 字节串 | 2/3 | 二进制数据、网络传输、文件I/O |
| u | Unicode字符串 | 2(3中默认) | Python2中处理中文等非ASCII |
| f | 格式化字符串 | 3.6+ | 字符串插值、变量嵌入 |
| 组合 | 如rf, fr | 3.6+ | 需要原始字符串的格式化 |
1、字符r是raw string【原始字符串】的意思
在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转义backslash '\' 【backslash,反斜线的意思~】
建议使用场景:prompt提示词之类、正则表达式之类
比如:由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'
类似于go语言的```符号print("Hello,\nworld")
# Hello,
# world
print(r"Hello,\nworld")
# Hello,\nworld2、字符b是byte string的意思
在 Python3 中,bytes 和 str 的互相转换方式是2种的
3、字符u是unicode encode string的意思
python中’\u’开头的字符串编码转中文
print(u"我是含有中文字符组成的字符串。")
#我是含有中文字符组成的字符串。
print(r"HTTP shelL\u540e\u95e8")
# HTTP shelL\u540e\u95e8
print(u"HTTP shelL\u540e\u95e8")
# HTTP shelL后门后面字符串以 Unicode 格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
不仅包含中文在内的任意字符串都可以采用unicode编码。一般英文字符串在任何编码的情况下都能正常解析,所以一般不用显式添加u。然而中文最好要说明其编码,否则编码转换时就会出现乱码(比如本来用gbk编码但拿unicode来解码)。解决编码问题一劳永逸的方法是在**.py**的文件头添加如下内容:
# coding: utf-8如果不加这一行,有时就会出现如下所示的编码解析错误:
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 86, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details4、字符f是format string【格式化字符串】的意思
以 f开头表示在字符串内支持大括号内的python 表达式
print(f'{name} done in {time.time() - t0:.2f} s')扩展1:要将字符串转换为"gbk"编码,可以使用Python的encode()方法
因为:在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicode
unicode 分为utf-32 (占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),所以utf-16 是最常用的unicode版本,但是在文件里存的还是utf-8,因为utf8省空间
在python 3,encode编码的同时会把string变成bytes类型,decode解码的同时会把bytes类型变成string类型
在unicode编码中 1个中文字符=2个字节,1个英文字符 = 1个字节,切记:ASCII是不能存中文字符的
utf-8是可变长字符编码,它是unicode的优化,所有的英文字符依然按ASCII形式存储,所有的中文字符统一是3个字节
unicode包含了所有国家的字符编码,不同字符编码之间的转换都需要经过unicode的过程
python本身的默认编码是utf-8
附录1、python2默认ascii编码、python3默认utf-8编码
python2默认ascii编码
Python 2.7.11 (default, Feb 24 2016, 10:48:05)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'python3默认utf-8编码
Python 3.5.2 (default, Jun 29 2016, 13:43:58)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'附录2、官网【很好的是-有中文!】
- python3.12的稳定版的文档:https://docs.python.org/3.12/
- The Python Software Foundation: https://www.python.org/psf/
- python官网:Main website: https://www.python.org/
- 【编译工具链开发者】Developer resources: https://devguide.python.org/
- Downloads: https://www.python.org/downloads/
- Module repository: https://pypi.org/