Python格式化字符串

在编写程序的过程中,经常需要进行格式化输出,每次用每次查。干脆就在这里整理一下,以便索引。

格式化操作符(%)

"%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%)。

下面整理了一下Python中字符串格式化符合:

格式化符号

说明

%c

转换成字符(ASCII 码值,或者长度为一的字符串)

%r

优先用repr()函数进行字符串转换

%s

优先用str()函数进行字符串转换

%d / %i

转成有符号十进制数

%u

转成无符号十进制数

%o

转成无符号八进制数

%x / %X

转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)

%e / %E

转成科学计数法(e / E控制输出e / E)

%f / %F

转成浮点数(小数部分自然截断)

%g / %G

%e和%f / %E和%F 的简写

%%

输出% (格式化字符串里面包括百分号,那么必须使用%%)

这里列出的格式化符合都比较简单,唯一想要强调一下的就是"%s"和"%r"的差别。

看个简单的代码:

  1. string = "Hello\tWill\n"
  2.  
  3. print "%s" %string
  4. print "%r" %string

代码的输出为:

其实,这里的差异是str()和repr()两个内建函数之间的差异:

  • str()得到的字符串是面向用户的,具有较好的可读性
  • repr()得到的字符串是面向机器的
    • 通常(不是所有)repr()得到的效果是:obj == eval(repr(obj))

格式化操作符辅助符

通过"%"可以进行字符串格式化,但是"%"经常会结合下面的辅助符一起使用。

辅助符号

说明

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号(+)

#

在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X")

0

显示的数字前面填充"0"而不是默认的空格

(var)

映射变量(通常用来处理字段类型的参数)

m.n

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

看一些简单的 例子:

  1. num = 100
  2.  
  3. print "%d to hex is %x" %(num, num)
  4. print "%d to hex is %X" %(num, num)
  5. print "%d to hex is %#x" %(num, num)
  6. print "%d to hex is %#X" %(num, num)
  7.  
  8. # 浮点数
  9. f = 3.1415926
  10. print "value of f is: %.4f" %f
  11.  
  12. # 指定宽度和对齐
  13. students = [{"name":"Wilber", "age":27}, {"name":"Will", "age":28}, {"name":"June", "age":27}]
  14. print "name: %10s, age: %10d" %(students[0]["name"], students[0]["age"])
  15. print "name: %-10s, age: %-10d" %(students[1]["name"], students[1]["age"])
  16. print "name: %*s, age: %0*d" %(10, students[2]["name"], 10, students[2]["age"])
  17.  
  18. # dict参数
  19. for student in students:
  20. print "%(name)s is %(age)d years old" %student

代码输出为:

对于Python的格式化操作符,不仅可以接受tuple类型的参数,也可以支持dict,象上面代码的最后一部分,那么格式化字符串中就可以直接使用"%(key)s"(这里的s根据具体类型改变)的方式表示dict中对应的value了。

字符串模板

其实,在Python中进行字符串的格式化,除了格式化操作符,还可以使用string模块中的字符串模板(Template)对象。下面就主要看看Template对象的substitute()方法:

  1. from string import Template
  2.  
  3. s = Template("Hi, $name! $name is learning $language")
  4. print s.substitute(name="Wilber", language="Python")
  5.  
  6. d = {"name": "Will", "language": "C#"}
  7. print s.substitute(d)
  8.  
  9. # 用$$表示$符号
  10. s = Template("This book ($bname) is 17$$")
  11. print s.substitute(bname="TCP/IP")

代码结果为:

字符串内建函数format()

Python2.6开始,新增了一种格式化字符串的函数str.format(),通过这个函数同样可以对字符串进行格式化处理。在format()函数中,使用“{}”符号来当作格式化操作符。

下面直接通过一些简单的例子演示format()函数的基本使用:

  1. # 位置参数
  2. print "{0} is {1} years old".format("Wilber", 28)
  3. print "{} is {} years old".format("Wilber", 28)
  4. print "Hi, {0}! {0} is {1} years old".format("Wilber", 28)
  5.  
  6. # 关键字参数
  7. print "{name} is {age} years old".format(name = "Wilber", age = 28)
  8.  
  9. # 下标参数
  10. li = ["Wilber", 28]
  11. print "{0[0]} is {0[1]} years old".format(li)
  12.  
  13. # 填充与对齐
  14. # ^、<、>分别是居中、左对齐、右对齐,后面带宽度
  15. # :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
  16. print '{:>8}'.format('3.14')
  17. print '{:<8}'.format('3.14')
  18. print '{:^8}'.format('3.14')
  19. print '{:0>8}'.format('3.14')
  20. print '{:a>8}'.format('3.14')
  21.  
  22. # 浮点数精度
  23. print '{:.4f}'.format(3.1415926)
  24. print '{:0>10.4f}'.format(3.1415926)
  25.  
  26. # 进制
  27. # b、d、o、x分别是二进制、十进制、八进制、十六进制
  28. print '{:b}'.format(11)
  29. print '{:d}'.format(11)
  30. print '{:o}'.format(11)
  31. print '{:x}'.format(11)
  32. print '{:#x}'.format(11)
  33. print '{:#X}'.format(11)
  34.  
  35. # 千位分隔符
  36. print '{:,}'.format(15700000000)

str的内建函数

在最开始的时候,Python有一个专门的string模块,要使用string的方法要先import这个模块。从Python2.0开始, 为了方便使用,str类型添加了很多内建函数,这些函数可以实现跟string模块中函数相同的功能,也就是说,只要S是一个字符串对象就可以直接使用内建函数,而不用import。

对于字符串的格式化处理,也可以考虑使用str的其他内建函数:

  1. >>> dir(str)
  2. ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
  3. format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
  4. slice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mo
  5. d__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
  6. '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook
  7. __', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center',
  8. 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index
  9. ', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper',
  10. 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', '
  11. rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', '
  12. strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

下面整理出来了一些常用的str类型的内建函数:

  1. # 小写
  2. S.lower()
  3. # 大写
  4. S.upper()
  5. #大小写互换
  6. S.swapcase()
  7. # 首字母大写
  8. S.capitalize()
  9.  
  10. # 输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
  11. S.ljust(width,[fillchar])
  12. # 右对齐
  13. S.rjust(width,[fillchar])
  14. # 中间对齐
  15. S.center(width, [fillchar])
  16.  
  17. # 返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
  18. S.find(substr, [start, [end]])
  19. # 返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
  20. S.rfind(substr, [start, [end]])
  21. # 计算substr在S中出现的次数
  22. S.count(substr, [start, [end]])
  23. #把S中的oldstar替换为newstr,count为替换次数
  24. S.replace(oldstr, newstr, [count])
  25.  
  26. # 把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
  27. S.strip([chars])
  28. S.lstrip([chars])
  29. S.rstrip([chars])
  30.  
  31. # 以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
  32. S.split([sep, [maxsplit]])
  33. # 把seq代表的字符串序列,用S连接起来
  34. S.join(seq)

总结

本文整理了一些格式化字符,以及一些辅助指令,结合格式化操作符(%),就可以生成特定格式的字符串了。也可以使用字符串模板来进行字符串格式化。

Python格式化字符串~转的更多相关文章

  1. Python格式化字符串和转义字符

    地址:http://blog.chinaunix.net/uid-20794157-id-3038417.html Python格式化字符串的替代符以及含义     符   号     说     明 ...

  2. Python格式化字符串知多少

    字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语: ...

  3. Python格式化字符串

    在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的pr ...

  4. Python格式化字符串--format

    format格式化字符串方法相较于老版%格式方法的优点: 1.不需要理会数据类型的问题,在%方法中'%s'只能替代字符串类型. 2.单个参数可以多次输出,参数顺序可以不相同. 3.填充方式十分灵活,对 ...

  5. Python - 格式化字符串的用法

    0. 摘要 Python支持多种格式化字符串的方法,包括%-fromatting.str.format().f-strings三种,f-strings是Python3.6以后出现的一种新方法,相比其他 ...

  6. 【转】Python格式化字符串str.format()

    原文地址:http://blog.xiayf.cn/2013/01/26/python-string-format/ 每次使用Python的格式字符串(string formatter),2.7及以上 ...

  7. 18.Python格式化字符串(格式化输出)

    Python 提供了“%”对各种类型的数据进行格式化输出,例如如下代码: price = 108 print ("the book's price is %s" % price) ...

  8. Python格式化字符串(格式化输出)

    熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的. print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下 ...

  9. Python格式化字符串(f,F,format,%)

    # 格式化字符串: 在字符串前加上 f 或者 F 使用 {变量名} 的形式来使用变量名的值 year = 2020 event = 'Referendum' value = f'Results of ...

随机推荐

  1. setTimeout和setInterval的注意事项

    精准问题 setTimeout的问题在于它并不是精准的,例如使用setTimeout设定一个任务在10ms后执行,但是在9ms后,有一个任务占用了5ms的cpu时间片,再次轮到定时器执行时,时间已经过 ...

  2. 简单介绍一下python Queue中常用的方法

    Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之FalseQueue.fu ...

  3. PHP PDO的FETCH_NUM、FETCH_BOTH、FETCH_ASSOC

    不容易混淆的有:FETCH_CLASS,FETCH_COLUMN,FETCH_OBJ... 数据库的连接准备部分 $dsn = 'mysql:host=127.0.0.1;port=3306;dbna ...

  4. MySQL5.6 PERFORMANCE_SCHEMA 说明

    背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数.并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储 ...

  5. Android之界面(布局文件layput)

    1.关于组件居中  ① android:layout_gravity="center" 控件在包含该控件的父控件中的位置.同样,当我们在Button按钮控件中设置android:l ...

  6. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  7. 登录服务器windows2008出现:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。(或者出现黑屏界面)

    问题:有段时间登录服务器总是提示:远程桌面服务当前正忙,因此无法完成您尝试执行的任务. 在微软找到的原因是:Csrss.exe 进程和某些应用程序 (例如,Microsoft Excel 或 Micr ...

  8. 分布式追踪系统dapper

    http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...

  9. Google之Chromium浏览器源码学习——base公共通用库(三)

    本节将介绍base公共通用库中的containers,其包含堆栈.列表.集合.以及Most Recently Used cache(最近使用缓存模板). linked_list.h:一个简单的列表类型 ...

  10. maven-replacer-plugin

    今天多认识了下这个maven插件. 基本用法: <plugin> <groupId>com.google.code.maven-replacer-plugin</grou ...