在Python 3.0中,%操作符通过一个更强的格式化方法format()进行了增强。对str.format()的支持已经被反向移植到了Python 2.6
在2.6中,8-bit字符串和Unicode字符串都有一个format()方法,这个方法会把字符串当作一个模版,通过传入的参数进行格式化。这个用来格式化的模版使用大括号({,})作为特殊字符。
Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法;
Python是完全面向对象的语言, 任何东西都是对象;
字符串的参数使用{NUM}进行表示, 0表示第一个参数, 1表示第二个参数, 以后顺次递加;
使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等;
数字(0, 1, ...)即代表format()里面的元素, 所以可以使用"."调用元素的方法;
参见网址: http://www.python.org/dev/peps/pep-3101/
代码示例
# -*- coding: utf-8 -*-
#====================
#File: abop.py
#Author: Wendy
#Date: 2013-12-03
#====================
#eclipse pydev, python3.3
age = 25
name = 'Caroline'
print('{0} is {1} years old. '.format(name, age)) #输出参数
print('{0} is a girl. '.format(name))
print('{0:.3} is a decimal. '.format(1/3)) #小数点后三位
print('{0:_^11} is a 11 length. '.format(name)) #使用_补齐空位
print('{first} is as {second}. '.format(first=name, second='Wendy')) #别名替换
print('My name is {0.name}'.format(open('out.txt', 'w'))) #调用方法
print('My name is {0:8}.'.format('Fred')) #指定宽度
输出:
Caroline is 25 years old.
Caroline is a girl.
0.333 is a decimal.
_Caroline__ is a 11 length.
Caroline is as Wendy.
My name is out.txt
My name is Fred .
# Substitute positional argument 0 into the string.
"User ID: {0}".format("root")
-> "User ID: root"
# Use the named keyword arguments
'User ID: {uid} Last seen: {last_login}'.format(uid='root', last_login = '5 Mar 2008 07:20')
-> 'User ID: root Last seen: 5 Mar 2008 07:20'
大括号可以写两遍来转义。
format("Empty dict: {{}}")
-> "Empty dict: {}"
你也可以使用字段的组合来读取属性或者字典的key值。
import sys
'Platform: {0.platform} Python version: {0.version}'.format(sys)
-> 'Platform: darwin Python version: 2.6a1+ (trunk:61261M, Mar 5 2008, 20:29:41) \n[GCC 4.0.1 (Apple Computer, Inc. build 5367)]'
import mimetypes
'Content-type: {0[.mp4]}'.format(mimetypes.types_map)
-> 'Content-type: video/mp4'
注意,当使用字典类型的表示方法,如[.mp4]时,你不需要引号将字符串(.mp4)引起来;它会查找用.mp4作为主键的值。以整数开头的字符串会被转换成一个整数。你不能在被格式化的字符串中写复杂的表达式。
我们还可以通过在格式化指示符后面添加一个冒号来进行精确格式化。例如:
# Field 0: left justify, pad to 15 characters
# Field 1: right justify, pad to 6 characters
fmt = '{0:15} ${1:>6}'
fmt.format('Registration', 35)
->'Registration $ 35'
fmt.format('Tutorial', 50)
->'Tutorial $ 50'
fmt.format('Banquet', 125)
->'Banquet $ 125'
fmt = '{0:{1}}'
width = 15
fmt.format('Invoice #1234', width)
->'Invoice #1234 '
width = 35
fmt.format('Invoice #1234', width) ->
'Invoice #1234 '
>>> '{0:g}'.format(3.75)
'3.75'
>>> '{0:e}'.format(3.75)
'3.750000e+00'
def __format__(self, format_spec):
if isinstance(format_spec, unicode):
return unicode(str(self))
else:
return str(self)
>>> format(75.6564, '.2f')
'75.66'