原文:https://www.jb51.net/article/176601.htm
原文有bug特参考:https://www.cnblogs.com/songzhenhua/p/13236794.html修改

Python中字符串前“b”,“r”,“u”,“f”的作用

1、字符串前加 u

例:u"我是含有中文字符组成的字符串。"

作用:

前缀u表示该字符串是unicode编码,Python2中用,用在含有中文字符的字符串前,防止因为编码问题,导致中文出现乱码。另外一般要在文件开关标明编码方式采用utf8。

Python3中,所有字符串默认都是unicode字符串。

2、字符串前加 r

例:r"\n\n\n\n”  表示一个普通字符串 \n\n\n\n,而不表示换行了。

作用:

去掉反斜杠的转义机制。

在普通字符串中,反斜线是转义符,代表一些特殊的内容,如换行符\n。前缀r表示该字符串是原始字符串,即\不是转义符,只是单纯的一个符号。

常用于特殊的字符如换行符、正则表达式、文件路径。

注意不能在原始字符串结尾输入反斜线,否则Python不知道这是一个字符还是换行符(字符串最后用\表示换行),会报错:

>>> print(r'C:\Program File\my\path''\')  File "<stdin>", line 1print(r'C:\Program File\my\path''\')^
SyntaxError: EOL while scanning string literal

那如果是一个文件夹路径就是以\结尾怎么办呢,可以再接一个转义\的字符串:

>>> print(r'C:\Program File\my\path''\\')
C:\Program File\my\path\

或、

>>> print(r'C:\Program File\my\path'+'\\')
C:\Program File\my\path\

注意
在python的正则表达式中,为表示模块re要求的单个反斜杠,需要在字符串中书写两个反斜杠,让解释器对其进行转义。换而言之,这里包含两层转义:解释器执行的转义和模块re执行的转义。实际上,在有些情况下也可使用单个反斜杠,让解释器自动对其进行转义,但请不要这样依赖解释器。
如果你厌烦了两个反斜杆,可使用原始字符串,如r'python\.org'

3、字符串前加 b

例:response = b'Hello World!'

b' ' 表示这是一个 bytes 对象,用在Python3中,Python3里默认的str是unicode类。Python2的str本身就是bytes类。

作用:

b" "前缀表示:后面字符串是bytes 类型。

用处:

前缀b表示该字符串是bytes类型。

常用在如网络编程中,服务器和浏览器只认bytes类型数据。如:send 函数的参数和 recv 函数的返回值都是 bytes 类型。

附:
在 Python3 中,bytes 和 str 的互相转换方式是

str.encode('utf-8')
bytes.decode('utf-8')

4、字符串前加 f

import time
t0 = time.time()
time.sleep(1)
name ='processing'
print(f'{name} done in {time.time() - t0:.2f} s')

输出:

processing done in 1.00 s

Python3.6新加特性,前缀f用来格式化字符串。可以看出f前缀可以更方便的格式化字符串,比format()方法可读性高且使用方便。

而且加上f前缀后,支持在大括号内,运行Python表达式。

你还可以用fr前缀来表示原生字符串。

Python中bytes与字符串的相互转化

# bytes转字符串方式一
b=b'\xe9\x80\x86\xe7\x81\xab'
string=str(b,'utf-8')
print(string)
>>> 逆火
>>>
# bytes转字符串方式二
b=b'\xe9\x80\x86\xe7\x81\xab'
string=b.decode() # 第一参数默认utf8,第二参数默认strict
print(string)
>>> 逆火# bytes转字符串方式三
b=b'\xe9\x80\x86\xe7\x81haha\xab'
string=b.decode('utf-8','ignore') # 忽略非法字符,用strict会抛出异常
print(string)
>>> 逆haha# bytes转字符串方式四
b=b'\xe9\x80\x86\xe7\x81haha\xab'
string=b.decode('utf-8','replace') # 用?取代非法字符
print(string)
>>> 逆�haha�
>>>
# 字符串转bytes方式一
str1='逆火'
b=bytes(str1, encoding='utf-8')
print(b)
>>> b'\xe9\x80\x86\xe7\x81\xab'# 字符串转bytes方式二
b=str1.encode('utf-8')
print(b)
>>> b'\xe9\x80\x86\xe7\x81\xab'

前缀u、b测试

下面的内容来源于:https://blog.csdn.net/anlian523/article/details/80504699,原文有错误,特转过来修改


字符串的类型只有两种(str,bytes),

>>> oath = '我爱妞'
>>> print(type(oath))
<class 'str'>
>>> print(len(oath))
3
>>> oath1 = u'我爱妞'
>>> print(type(oath1))
<class 'str'>
>>> print(len(oath1))
3
>>> print(oath==oath1)
True

发现无前缀,和前缀u,构造出来的字符串常量是一样的。

类型都是str,长度都是3,==判断返回true
其实,这里是因为,python3中,字符串的存储方式都是以Unicode字符来存储的,所以前缀带不带u,其实都一样。

>>> oath = '我爱妞'
>>> oath1 = u'我爱妞'
>>> print(oath is oath1)
False

is判断返回False

结论:字符串常量,前缀带不带u,都是一样的。

>>> utf8 = oath.encode('utf-8')
>>> print(type(utf8))
<class 'bytes'>
>>> print(len(utf8))
9
>>> print(utf8)
b'\xe6\x88\x91\xe7\x88\xb1\xe5\xa6\x9e'
>>> gbk = oath.encode('gbk')
>>> print(type(gbk))
<class 'bytes'>
>>> print(len(gbk))
6
>>> print(gbk)
b'\xce\xd2\xb0\xae\xe6\xa4'

可以发现任何str类型的字符串,在经过encode(‘utf-8’)后,通过utf-8编码,将Unicode字符转换为对应的以字节方式存储的若干十六进制数。

根据如上程序以及结果,可以发现,utf-8用三个字节(6个十六进制数)来表示一个中文字符,而gbk用两个字节(4个十六进制数)来表示一个中文字符。

结论:encode()函数根据括号内的编码方式,把str类型的字符串转换为bytes字符串,字符对应的若干十六进制数。

既然str存储的是Unicode字符,那么也可以Unicode编码来存储str,形如\u1234

>>> u'\u5220\u9664'
'删除'
>>> '\u5220\u9664'
'删除'

发现\u后面跟四个十六进制数,就可以代表一个Unicode字符,同样的,前缀带不带u都一样。

>>> test = u'\u5220\u9664'
>>> print(len(test))
2
>>> print(test)
删除
>>> test1 = test.encode('utf-8')
>>> print(test1)
b'\xe5\x88\xa0\xe9\x99\xa4'
>>> print(type(test1))
<class 'bytes'>

结论:str类型的字符串,每个字符用字符本身或者\u1234来表示都可以,后者则是直接是Unicode编码。但打印时都是字符本身。

bytes字符串的组成形式,必须是十六进制数,或者ASCII字符:

>>> x = b'abc'
>>> x
b'abc'
>>> b'好'File "<stdin>", line 1b'好'^
SyntaxError: bytes can only contain ASCII literal characters.

提示错误:bytes只能包含ASCII字符。

还可以对bytes取索引,所以bytes类型也可以用for循环来迭代。取索引,将所在元素的数,转换为十进制数。

>>> g=b'\xce\xd2\xb0\xae\xe6\xa4'
>>> g[0]
206
>>> out = open('test.txt','w',encoding = 'utf-8')
>>>
>>> test = u'\u5220\u9664'
>>> print(len(test))
2
>>> print(test)
删除
>>> test1 = test.encode('utf-8')
>>> print(test1)
b'\xe5\x88\xa0\xe9\x99\xa4'
>>> print(type(test1))
<class 'bytes'>
>>>
>>> out.write(test)
2
>>> out.close()

Python中字符串前“b”,“r”,“u”,“f”的作用相关推荐

  1. python字符串前面加f什么意思_详解Python中字符串前“b”,“r”,“u”,“f”的作用...

    1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...

  2. 【编程帮助】python中字符串前的 r、b、u、f 的含义及用法

    针对实战中遇到的字符串前加有字母的情况而不知道它们的具体作用进行总结 一.字符串前加 r :去除转义字符 二.字符串前加 b : 表示该字符串是一个 bytes 对象 三.字符串前加 u :将该字符串 ...

  3. python中字符串前的r什么意思

    字母前加r表示raw string,也叫原始字符串常量,通常为了避免(转移符号)起作用 比如如下代码: s = r'test\tddd' s2 = 'test\tddd' print(s) print ...

  4. python字符串前面加f什么意思,浅析python字符串前加r、f、u、l 的区别

    先给大家介绍下Python 字符串前面加u,r,b,f的含义(字符串前缀) 1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 ...

  5. python 防止转义_python字符串前加r、f、u、l 的区别

    f-strings 是指以f或F 开头的字符串,其中以 {}包含的表达式会进行值替换.(目前支持python3.6版本) 下面看下f-strings的使用方法 基本使用(作用:替换值) 在字符串前加r ...

  6. python字符串前加r、f、u、l 的区别

    f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换.(目前支持python3.6版本) 下面看下 f-strings 的使用方法 基本使用(作用:替换值) & ...

  7. Python中字符串前u的详细解析,以及字符串前添加'b','r'的简单解释

    一.字符串前添加u,例如u'hello 世界你好!' 中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢? 我们要知道python内部 ...

  8. python——%s,%d,%f和字符串前加r,f,b,u用法讲解

    一.%s:打印字符串 举例说明:  %s相当于就是替换字符串的意思,以第一个为例,print("大家好,我叫%s"%name),他的意思是,把%s所在的位置的值替换成%后面指定的字 ...

  9. python 字符串前加r和f

    字符串前加 f 的含义 看例子 用法 总结 官方文档:点击这里 如果你今天将就而选择参考了我的文档,总有一天你还是会去阅读官方文档. 先看例子 list_ = [1,2,3] print(list_, ...

最新文章

  1. Spring编程模型:Spring实现了哪些编程模型?
  2. 现代软件工程 第十一章 【软件设计与实现】 练习与讨论
  3. Locally weighted linear regression
  4. 二阶有源低通滤波器幅频特性
  5. PPT制作教程—基础技巧
  6. 中央民族大学教授赵小兵:少数民族语言信息化关乎民众福祉,需要各界的更多支持...
  7. 中国地图矫正中的误差
  8. C语言 低通滤波器\带通滤波器\高通滤波器
  9. Google Earth Engine ——QGIS中计算加权质心
  10. php 生成指定长度字符串
  11. 跳转打开多个标签导致浏览器崩溃问题
  12. uniapp框架如何实现仿微信相册插件 | 图视频编辑 + 压缩
  13. R语言中的线性判别分析
  14. 计算机中丢失d3dcompiler_47,玩游戏提示缺少D3DCompiler_47.dll文件怎么解决?
  15. PB 打印机打印横纵向设置
  16. IDEA import导入的类明明存在,却飘红,你可以这样做
  17. 解决Anaconda环境中matplotlib中文乱码问题
  18. 机器视觉领域专业词汇中英对照
  19. 单片机第一步——点亮第一盏灯
  20. pip install 太慢,迅雷来帮忙

热门文章

  1. Centos6-防火墙的基本配置
  2. 适合女生佩戴的蓝牙耳机有什么推荐?五款高性价比蓝牙耳机
  3. Edge、Chrome 1月12日之后继续使用Flash的方法(超级专业,高能预警)
  4. 一些格言,希望自己铭记在心
  5. 《JavaScript学习笔记》
  6. 跨品种套利 (期货)
  7. CAD填充无法修剪的解决办法
  8. 我整理了50道经典Java算法题,直接进了字节跳动!!
  9. 一百行写一个2048
  10. python中并集符号_python中列表之间求差集、交集、并集