在python中格式化输出字符串使用的是%运算符,通用的形式为

•格式标记字符串 % 要输出的值组
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为:

•%cdoe
其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如:

•'%s %s %s' % (1, 2.3, ['one', 'two', 'three'])
它的输出为'1 2.3 ['one', 'two', 'three']',就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个函数,可以用%r来标记。除了%s外,还有很多类似的code:

字符串格式化:

代码如下 复制代码
format = “hello %s, %s enough for ya?”
values = (‘world’,'hot’)
print format % values
结果:hello world, hot enough for ya?

注:2.7可以。3.0不行

3.0要用print(format % values) 要用括号括起来。

与php类似但函数或方法名不一样的地方:

explode/" target="_blank">php explode=> python split
php trim => python strip
php implode => python join

工作中格式化字符串时遇到了UnicodeDecodeError的异常,所以研究下字符串格式化的相关知识和大家分享。

代码如下 复制代码
C:Userszhuangyan>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = '你好世界'
>>> print 'Say this: %s' % a
Say this: 你好世界
>>> print 'Say this: %s and say that: %s' % (a, 'hello world')
Say this: 你好世界 and say that: hello world
>>> print 'Say this: %s and say that: %s' % (a, u'hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 10: ordinal
not in range(128)

看到print 'Say this: %s and say that: %s' % (a, u'hello world') 这句报的UnicodeDecodeError错误了吗,和上句的区别只是把'hello world'改成 u'hello world'的原因,str对象变成了unicode对象。但问题是,’hello world’只是单纯的英文字符串,不包含任何ASCII之外的字符,怎么会无法decode(www.111cn.net)呢?再仔细看看异常附带的message,里面提到了0xe4,这个显然不是’hello world‘里面的,所以只能怀疑那句中文了。

>>> a 'xc4xe3xbaxc3xcaxc0xbdxe7'

把它的字节序列打印了出来,果然就是它,第一个就是0xe4。

看来在字符串格式化的时候Python试图将a decode成unicode对象,并且decode时用的还是默认的ASCII编码而非实际的UTF-8编码。那这又是怎么回事呢??下面继续我们的试验:

代码如下 复制代码
>>> 'Say this: %s' % 'hello'
'Say this: hello'
>>> 'Say this: %s' % u'hello'
u'Say this: hello'
>>>

仔细看,’hello’是普通的字符串,结果也是字符串(str对象),u’hello’变成了unicode对象,格式化的结果也变成unicode了(注意结果开头的那个u)。

看看Python文档怎么说的:

If format is a Unicode object, or if any of the objects being converted using the %s conversion are Unicode objects, the result will also be a Unicode object.

如果代码里混合着str和unicode,这种问题很容易出现。在同事的代码里,中文字符串是用户输入的,经过了正确的编码处理,是以UTF-8编码的str对象;但那个惹事的unicode对象,虽然其内容都是ASCII码,但其来源是sqlite3数据库查询的结果,而sqlite的API返回的字符串都是unicode对象,所以导致了这么怪异的结果。

最后我测试用format格式字符串的方式不会出现上述异常!

代码如下 复制代码
>>> print 'Say this:{0} and say that:{1}'.format(a,u'hello world')
Say this:你好世界 and say that:hello world

接下来我们研究下format的基本用法。

代码如下 复制代码
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'

上面是在2.x下的演示,在3.x中format方法还有更强大的功能

象C 中的sprintf函数一样,可以用“%”来格式化字符串
from:http://www.111cn.net/phper/python/52545.htm

python字符串格式化之学习笔记相关推荐

  1. python字符串大全_python学习笔记:字符串操作大全

    1.借取字符串str = '0123456789′ print str[0:3] #截取第一位到第三位的字符 print str[:] #截取字符串的全部字符 print str[6:] #截取第七个 ...

  2. python发邮件11002_Python学习笔记(二)——数字类型的运算及其输入与格式化输出...

    Python中数字有四种类型:整数.布尔型.浮点数和复数.int (整型), 如 1, 只有一种整数类型 int,表示为长整型,没有python2 中的 long. bool (布尔型), 如True ...

  3. 【小甲鱼】python零基础入门学习笔记 03讲~43讲

    本篇基于[莫烦]python基础教程,属于查漏补缺 建议学习顺序 小甲鱼->莫烦numpy&pandas 目录 第003讲 插曲之变量和字符串 课堂笔记 变量 变量 需要注意的地方 字符 ...

  4. 这篇文章有点长,但绝对是保姆级的Python字符串格式化讲解

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python学习交流群:773162165 前言 今 ...

  5. python 字符串格式化%s_Python字符串格式化%s%d%f详解

    关于讨论输出格式化的问题,小编不是一时兴起,之前学习python的时候就经常遇到输出时"%d",一直没有仔细学习,今天又看到了,下面分享一个简单实例,python输出99乘法表: ...

  6. python的格式化输出学号_安利三个关于Python字符串格式化进阶知识

    点击蓝色"Python空间"关注我丫 加个"星标",每天一起快乐的学习 今 日 鸡 汤 名花倾国两相欢,常得君王带笑看. /前言/ 关于Python字符串格式化 ...

  7. python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解

    一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...

  8. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  9. python字符串格式化详解_Python字符串格式化%s%d%f详解

    Python字符串格式化%s%d%f详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python字符串格式化%s%d%f详解.txt ] (友情提示:右键点上 ...

最新文章

  1. 雷军写代码水平如何?
  2. Java实现字符全阵列阵列
  3. MyBatis-24MyBatis缓存配置【集成EhCache】
  4. web 全栈 学习 2 一个好的页面是如何炼成的
  5. java输入输出实验报告_JAVA实验报告(河北工业大学)
  6. 深度学习训练的时候gpu占用0_26秒单GPU训练CIFAR10,Jeff Dean也点赞的深度学习优化技巧...
  7. 7-5 公路村村通 (30 分)(C语言实现)
  8. [JavaScript] 函数同名问题
  9. 开发一个简单的WebPart
  10. 随想录(什么是软件架构师)
  11. iOS 点击tabbarItem的时候根据登录状态判断加载哪个视图控制器
  12. python flask 路由_python框架flask入门之路由及简单实现方法
  13. JVM 字节码从入门到精通
  14. 基于stm32的室内环境监测系统 9746字
  15. 美团饿了么外卖CPS联盟小程序(新增H5端)花小猪,滴滴大车,一键获取Path
  16. oj2448: 分离正整数中的各位数
  17. Gradle脚本小总结
  18. 从零开始学习主成分分析
  19. 脱口秀与ST洲际的“玩笑”故事,掀开了市场隐秘的角落
  20. Windows10 中 Apple 云盘 iCloud Drive 默认在 C 盘下的存储目录迁移到其他盘符的指定目录

热门文章

  1. centos7 安装mysql php_Centos7安装mysql与php的方法
  2. 计算机网络实验ip数据报转发,计算机网络实验报告三网际协议IP.doc
  3. 大牛程序员分享 Python基础学习笔记
  4. Python人脸识别+手机推送,老板来了你就会收到短信提示
  5. list group by java_Java List集合实现MySQL Group By功能
  6. python预处理删除特殊字符_python - 如何删除包含特殊字符的字符串?_others_酷徒编程知识库...
  7. c# wpf listbox 高度_农村太阳能路灯厂家报价表2020(不同高度)
  8. java笔试题_【干货分享】中兴通讯2021校招笔试测评攻略
  9. mysql杠杆加号什么意思_对tb_book表中的数据,按ID序号进行升序排列,查询语句是什么?_学小易找答案...
  10. 安全函数不安全-多线程慎用List.h