精华内容
下载资源
问答
  • 2021-03-06 14:36:08

    它归结为您的输出流编码.在这种特殊情况下,由于您使用的是print,因此使用的输出文件是

    sys.stdout.

    交互模式/标准输出未重定向

    当您以交互模式运行Python时,或者当您不将stdout重定向到文件时,Python使用基于环境的编码,即区域设置环境变量,如LC_CTYPE.例如,如果您运行这样的程序:

    $LC_CTYPE='en_US' python test.py

    ...

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128)

    它将使用ANSI_X3.4-1968用于sys.stdout(请参阅sys.stdout.encoding)并失败.但是,你使用UTF-8(你显然已经这样做了):

    $LC_CTYPE='en_US.UTF-8' python test.py

    1234567890

    abcd

    αβγδ

    你会得到预期的输出.

    stdout重定向到文件

    当您将stdout重定向到文件时,Python不会尝试从您的环境语言环境中检测编码,但它会检查另一个环境变量PYTHONIOENCODING(检查源,initstdio() in Python/pylifecycle.c).例如,这将按预期工作:

    $PYTHONIOENCODING=utf-8 python test.py >/tmp/output

    因为Python将对/ tmp / output文件使用UTF-8编码.

    手动stdout编码覆盖

    您也可以使用所需的编码手动重新打开sys.stdout(请查看this和this SO问题):

    import sys

    import codecs

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)

    现在print将正确输出str和unicode对象,因为底层流编写器会将它们转换为UTF-8.

    输出前手动字符串编码

    当然,您也可以在输出之前手动将每个unicode编码为UTF-8 str:

    print ('%5s' % s2).encode('utf8')

    但这很乏味且容易出错.

    显式文件打开

    为了完整性:在Python 2中打开使用特定编码(如UTF-8)进行写入的文件时,您应该使用io.open或codecs.open,因为它们允许您指定编码(参见this question),与内置的open不同:

    from codecs import open

    myfile = open('filename', encoding='utf-8')

    要么:

    from io import open

    myfile = open('filename', encoding='utf-8')

    更多相关内容
  • 字符串格式化输出是python非常重要的基础语法,今天就把三种格式化输出做一个简单的总结,希望对大家有帮助。 格式化输出:内容按照一定格式要求进行输出。 1.使用占位符%输出 python2.6版本之前,使用%格式化字符串...
  • 本文介绍了Python字符串格式化,主要有两种方法,分享给大家,具体如下 用于字符串的拼接,性能更优。 字符串格式化有两种方式:百分号方式、format方式。 百分号方式比较老,而format方式是比较先进的,企图替代...
  • Python字符串格式化

    千次阅读 2021-09-01 17:54:33
    字符串格式化是我们在使用Python中经常用到的功能。Python为我们提供了四种格式化字符串的方法,分别是%运算符、字符串format方法、格式化字符串字面值以及模板字符串。 %运算符 %运算符提供了一种printf风格的字符...

    欢迎访问我的个人博客

    https://vincillau.github.io/

    Python字符串格式化

    引言

    字符串格式化是我们在使用Python中经常用到的功能。Python为我们提供了四种格式化字符串的方法,分别是%运算符字符串format方法格式化字符串字面值以及模板字符串

    %运算符

    %运算符提供了一种printf风格的字符串格式化,它的用法跟C语言中的printf十分相似。先来看一个例子:

    s = "我叫%s, 今年%d岁。" % ("小明", 18) # 我叫小明, 今年18岁。
    print(s)
    

    使用%运算符格式化字符串的语法是format % valuesformat是一个字符串,values可以是一个对象元组字典,format中会有若干个’%'开头的标记转换符,例如“%d”代表一个整数,“%s”代表一个字符串,这些标记转换符会被values中的条目替换。

    value是一个元组时,需要每个转换符与value中的条目一一对应,可以为标记转换符添加映射键,value的类型应为字典。例如:

    s = "我叫%(name)s, 今年%(age)d岁。" % {"name": "小明", "age": 18}
    print(s)
    

    转换标记符包含两个或更多字符并具有以下组成,且必须遵循此处规定的顺序:

    1. ‘%’ 字符,用于标记转换符的起始。
    2. 映射键(可选),由加圆括号的字符序列组成 (例如 (somename))。
    3. 转换旗标(可选),用于影响某些转换类型的结果。
    4. 最小字段宽度(可选)。 如果指定为 ‘*’ (星号),则实际宽度会从 values 元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。
    5. 精度(可选),以在 ‘.’ (点号) 之后加精度值的形式给出。 如果指定为 ‘*’ (星号),则实际精度会从 values 元组的下一元素中读取,要转换的对象则为精度之后的元素。
    6. 长度修饰符(可选)。
    7. 转换类型。

    以下是转换符列表:

    转换符含义
    ‘d’有符号十进制整数。
    ‘i’有符号十进制整数。
    ‘o’有符号八进制数。
    ‘u’过时类型 – 等价于 ‘d’。
    ‘x’有符号十六进制数(小写)。
    ‘X’有符号十六进制数(大写)。
    ‘e’浮点指数格式(小写)。
    ‘E’浮点指数格式(大写)。
    ‘f’浮点十进制格式。
    ‘F’浮点十进制格式。
    ‘g’浮点格式。 如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。
    ‘G’浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。
    ‘c’单个字符(接受整数或单个字符的字符串)。
    ‘r’字符串(使用 repr() 转换任何 Python 对象)。
    ‘s’字符串(使用 str() 转换任何 Python 对象)。
    ‘a’字符串(使用 ascii() 转换任何 Python 对象)。
    ‘%’不转换参数,在结果中输出一个 ‘%’ 字符。

    转换标志列表:

    标志含义
    ‘#’值的转换将使用“替代形式”(具体定义见下文)。
    ‘0’转换将为数字值填充零字符。
    ‘-’转换值将靠左对齐(如果同时给出 ‘0’ 转换,则会覆盖后者)。
    ’ ’(空格) 符号位转换产生的正数(或空字符串)前将留出一个空格。
    ‘+’符号字符 (’+’ 或 ‘-’) 将显示于转换结果的开头(会覆盖 “空格” 旗标)。

    Python官方文档并不建议我们使用这种方法,因为这种方法不仅需要标识转换符与value一一对应,而且还不能正确格式化元组列表等类型。所以,在Python中使用格式化字符串建议使用以下三种方法。

    字符串format方法

    例子:

    s = "{} + {} = {}".format(1, 2, 3) # 1 + 2 = 3
    print(s)
    

    format会将参数依次替换字符串中的{}并返回一个新的str对象。如果需要输出{}需要用两层花括号({{}})

    “{}”可以具有位置参数,format方法将会用指定位置的参数代替花括号。如果使用位置参数,那么所有的花括号中都必须有位置参数。例如:

    s = "{1} + {0} = {2}".format(1, 2, 3)
    print(s)
    

    “{}”中还可以具有关键字参数

    s = "我叫{name}, 今年{age}岁。".format(name="小明", age=18)
    print(s)
    

    位置参数和关键字参数可以混用。

    可以使用**传递字典作为关键字参数:

    table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
    print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
    # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
    

    还可以在花括号中添加格式化参数,详见格式字符串语法

    格式化字符串字面值

    Python3.6新增加了格式化字符串字面值的特性,可以方便的格式化字符串。

    例子:

    name = "小明"
    age = 18
    print(f"我叫{name}, 今年{age}岁。")
    # 我叫小明, 今年18岁。
    

    当我们在一个字符串前标注一个'f''F'时,Python解释器就认为这个字符串是一个格式化字符串字面值。在这个字符串中使用“{}”将一个变量或表达式括起来,Python就会用变量或表达式的内容替换“{}”。格式化字符串字面值还可以使用格式说明符,用法与str.format相同:

    price = 12.567
    print(f"苹果的价格是{price:.2f}") # 苹果的价格是12.57
    

    转换符!s!r!a分别调用strreprascii对表达式进行求值:

    class Student:
        def __init__(self, name: str = "小明", age: int = 18):
            self.name: str = name
            self.age: int = age
    
        def __str__(self):
            return self.name + " " + str(self.age) + " __str__"
    
        def __repr__(self):
            return self.name + " " + str(self.age) + " __repr__"
    
    
    print(f"{Student()!s}\n{Student()!r}\n{Student()!a}")
    # 小明 18 __str__
    # 小明 18 __repr__
    # \u5c0f\u660e 18 __repr__
    

    格式表达式中不能有反斜杠,否则会报错。即便未包含表达式,格式字符串字面值也不能用作文档字符串。

    模板字符串

    Python提供的Template类也可以用来格式化字符串,它位于string包。使用Template类时,实现实例化一个Template对象。然后调用substitutesafe_substitute用传入的参数替换模板字符串中的变量:

    t = Template("我叫$name, 今年$age岁。")
    s = t.substitute(name="小明", age=18)
    print(s)
    s = t.substitute({"name": "小明", "age": 18})
    print(s)
    

    $identifier为替换占位符,它会匹配一个名为 “identifier” 的映射键。如果映射键有歧义可以使用花括号区分。否则Python将匹配尽可能多的字符:

    print(Template("$ab").substitute(a=1, ab=2))  # 2
    print(Template("${a}b").substitute(a=1, ab=2))  # 1b
    print(Template("${ab}").substitute(a=1, ab=2))  # 2
    

    substitutesafe_substitute可以接受关键字参数或者字典。这两个方法的区别在于,模板字符串中的一个标识符在传入方法的参数中没有条目与之对应时,substatute会抛出ValueError,而safe_substitute会保留$和标识符而不进行替换。

    想要在字符串中保留$可以用$$转义。

    参考

    1. python字符串格式化深入详解(四种方法)

    2. printf 风格的字符串格式化

    3. string — 常见的字符串操作

    展开全文
  • Python 字符串格式化方法

    千次阅读 2022-01-24 16:09:17
    1.使用format(arg)方法 将字符串中用 {} 定义的替换域依次用参数arg中的数字替换 In[1]: 'hello,{}'.format('world!') Out[1]:'hello,world!' ...In[2]: '{},{},{}'.format(1,2,4...格式化字符串%(参数1,参数2......

    1.使用format(arg)方法


    将字符串中用 {} 定义的替换域依次用参数arg中的数字替换

    In[1]: 'hello,{}'.format('world!')
    Out[1]:'hello,world!'
    
    
    In[2]: '{},{},{}'.format(1,2,4)
    Out[2]:'1,2,4'
    
    In[3]: '{0},{1},{0}'.format(1,2,4)  #指定替换域
    Out[3]:'1,2,1'    
    

    2.使用%方法

    格式化字符串%(参数1,参数2......)

    •  "%" 之前是格式化字符串,"%" 之后是需要填入格式化字符串中的参数。多个参数之间使用逗号隔开。注意:只有一个参数时,可省略圆括号。
    Python格式控制符
    格式控制符说明格式控制符说明
    s将非str类型的对象使用str()函数转换为字符串r将非str类型的对象使用repr()函数转换为字符串
    c参数为单个字符或字符的Unicode码时,将Unicode码转化为对应的字符d、i参数为数字时,转换为带富豪的十进制整数
    o参数为数字时,转换为带富豪的八进制整数x参数为数字时,转换为带富豪的十六进制整数,字母小写
    e、E将数字转化为科学计算法格式X参数为数字时,转换为带富豪的十六进制整数,字母大写
    f、F将数字转换为十进制浮点数g、G浮点格式。如果指数小于-4或不小于精度(默认为6)使用指数格式,否则使用十进制格式。

    格式控制符的基本格式:

    %[name][flags][[width][.precision]]格式控制符

    name:圆括号括起来的字典对象的键。

    width:指定数字宽度;precision:指定数字的小数位数。

    flags:标识符,如:

    • + :在数值前添加整数或负数符号
    • - :在指定数字宽度时,当数字位数小于宽度时,将数字左对齐,末尾空格。
    • 0 :在指定数字宽度时,当数字位数小于宽度时,在数字前用0填充。
    •    :空格,在正数前添加空格符号位。
    In[4]: '%s %s'%(12,1.2)
    Out[4]: '12 1.2'
    
    In[5]: '12%c %c'%('a',65)
    Out[5]: '12a A'
    
    In[6]: '%d %d'%(12,3.5)
    Out[6]: '12 3'
    
    
    In[7]: '%6d'%(3.5) #指定宽度,默认填充空格
    Out[7]: '     3'
    
    In[8]: '%06d'%(3.5) #指定宽度,并填充0
    Out[8]: '000003'
    
    In[9]: '%-6d'%(3.5) #指定宽度,左对齐
    Out[9]: '3     '
    
    In[10]: '%8.3f'%(3.5)
    Out[10]: '   3.500'
    

    展开全文
  • Python练习——字符串格式输出宽度

    千次阅读 2021-10-02 22:03:12
    获得用户的输入当作宽度,以*作为填充符号右对齐输出PYTHON字符串。 代码如下:

    获得用户的输入当作宽度,以*作为填充符号右对齐输出PYTHON字符串。

    代码如下:

     

     

    展开全文
  • python字符串格式化方法以例子的形式表述如下: * 定义宽度 Python代码如下: >>>'%*s' %(5,'some') ' some' – 左对齐 Python代码如下: >>>'%-*s' %(5,'some') 'some ' 最小宽度为6的2位精度的浮点小数,...
  • 详细内容python字符串格式化的意思就是用format函数格式化字符串的用法。用法:它通过{}和:来代替传统%方式。1、使用位置参数要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数...
  • python字符串格式化深入详解(四种方法)

    万次阅读 多人点赞 2020-04-21 11:05:11
    前言:本文详细整理了python字符串格式化的几种方式。 一、使用 % 符号来进行格式化 格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下: %s 字符串 (采用str()...
  • 问题对很长的字符串,以指定的列宽将它们重新格式化。解决方案使用 textwrap 模块来格式化字符串的输出。比如,假如有下列的长字符串:s = "Look into my eyes, look into my eyes, the eyes, the eyes, \the eyes, ...
  • 今天在写代码时遇到的问题: 一般将十进制数转换为十六进制我们可以这样: a='%#x'%10 print('a') 或者 a='{0:#x}'.format(11) ...没错只需添加几个数字,这个也就是说当宽度不够十个时就用0来填充。解决这个后,心里还
  • Python格式化字符串格式化输出) 我们在上一节中讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者...
  • Python打印格式化打印
  • str.format()格式化数字的多种方法 例1: >>>print("{:.2f}".format(3.1415926)); 3.14
  • 本文介绍了Python字符串格式化,主要有两种方法,分享给大家,具体如下用于字符串的拼接,性能更优。字符串格式化有两种方式:百分号方式、format方式。百分号方式比较老,而format方式是比较先进的,企图替代古老的...
  • print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。 转换说明符(Conversion Specifier)只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的...
  • python字符串格式化

    2021-01-12 05:45:14
    写的不好,学习字符串格式化时候的记录笔记,待日后完善(有一些用法还不熟练)旧式格式化模板格式化字符串时,Python使用一个字符串作为模板 ,模板中有格式符,这些格式符为真实值预留位置,并说时真实数值应该呈现...
  • 一般能减肥的食物不好吃 一般能赚钱的工作不好玩 就是这个道理现在学到这里 之前还能背一背,不用脑子都行 但是现在学的内容多了 ...要求还有,采用宽度为30个字符,右对齐输出,多余的字符用花花符号( * )
  • 字符串格式化有两种方式:百分号方式、format方式。 其中,百分号方式比较老,而format方式是比较先进的,企图替代古老的方式,目前两者共存。 1.百分号方式 格式:%[(name)][flags][width].[precision]typecode ...
  • python字符串格式化代码: 格式 描述 %% 百分号标记 %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) %x 无符号整数...
  • 1.字符串连接>>> a = 'My name is ' + 'Suen'>>> a'My name is Suen'>>> a = 'My name is %s'%'Suen'>>> a'My name is Suen'>>> a = 'My name is %s, Age:%d'%('Suen'...
  • 本文介绍了Python字符串格式化,主要有两种方法,分享给大家,具体如下用于字符串的拼接,性能更优。字符串格式化有两种方式:百分号方式、format方式。百分号方式比较老,而format方式是比较先进的,企图替代古老的...
  • f-string 格式化 就是在字符串模板前面加上f,然后占位符使用{} ,里面直接放入对应的数据对象。 如下所示 f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元' 完整的代码如下 salary = input('...
  • Python几种基本的字符串格式化方法

    千次阅读 2022-01-31 15:11:14
    # %s 字符串 # %d 十进制有符号整数 # %u 十进制无符号正数 # %o 八进制无符号数 # %x 十六进制无符号数 # %X 十六进制无符号数,大写字母 # %e 浮点数科学计数法 # %E 浮点数科学计数法,大写E #
  • 格式 描述%%百分号标记 #就是输出一个%%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)%o无符号整数(八进制)%x无符号整数(十六进制)%X无符号整数(十六进制大写字符)%e浮点数字(科学计数法)%E...
  • Python字符串格式化

    千次阅读 2022-02-27 20:20:49
    python字符串格式化宽度、精度以及对齐方式
  • 一、字符串类型 1)字符串是字符的序列表示,根据字符的内容分为单行字符串和多行字符串。 2)单行字符串可以由一对单引号(’)或双引号(“)作为边界来表示,单引号和双引号作用相同 3)多行字符串可以由一对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,706
精华内容 9,482
关键字:

python字符串格式化宽度