逗笑老豆 發表於 2019-12-11 15:24:00

Python字符串格式方式 %s format()

<style>p.p1 { margin: 0; font: 12px ".PingFang SC" }
p.p2 { margin: 0; font: 12px "Helvetica Neue" }
span.s1 { font: 12px "Helvetica Neue" }
span.s2 { font: 12px ".PingFang SC" }</style>
<p>python中格式化字符串的方式有两种,一种是使用"%s"的方式,一种是str.format()的方式,接下来就对这两种方式做个介绍</p>
<h4>1.%s的方式</h4>
<p>两种用法,第一种是在字符串中使用%s占位,在字符串后使用<span style="color: rgba(0, 128, 128, 1)">%替换值<span style="color: rgba(0, 0, 0, 1)">来替换,例如:</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">my name is %s and i am %d years old</span><span style="color: rgba(128, 0, 0, 1)">"</span> %(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">xiaoming</span><span style="color: rgba(128, 0, 0, 1)">"</span>,18<span style="color: rgba(0, 0, 0, 1)">)
输出结果:myname </span><span style="color: rgba(0, 0, 255, 1)">is</span> xiaoming <span style="color: rgba(0, 0, 255, 1)">and</span> i am 18<span style="color: rgba(0, 0, 0, 1)"> years old
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello,%s</span><span style="color: rgba(128, 0, 0, 1)">"</span> % <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Tom</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
输出结果:Hello,Tom</span></pre>
</div>
<p>该方式的优点是简单,缺点是影响可读性的,在数量多了以后,很难清楚哪一个占位符对应哪一个实参,排序很麻烦</p>
<p>另一种方式可以用字典的形式进行表示:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">print</span> (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello,%(name)s</span><span style="color: rgba(128, 0, 0, 1)">"</span> % {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Tom</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 参数比较多的情况下这样用</span>
value = {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">greet</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello world</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">language</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Python</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%(greet)s from %(language)s.</span><span style="color: rgba(128, 0, 0, 1)">"</span> %<span style="color: rgba(0, 0, 0, 1)"> value)
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">%(greet)s from %(language)s.</span><span style="color: rgba(128, 0, 0, 1)">"</span> % {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">greet</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Hello world</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">language</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Python</span><span style="color: rgba(128, 0, 0, 1)">"</span>}</pre>
</div>
<p>常用字符格式有:</p>
<ul>
<li>%% 百分号标记 #就是输出一个%</li>
<li>%c 字符及其ASCII码</li>
<li>%s 字符串</li>
<li>%d 有符号整数(十进制)</li>
<li>%u 无符号整数(十进制)</li>
<li>%o 无符号整数(八进制)</li>
<li>%x 无符号整数(十六进制)</li>
<li>%X 无符号整数(十六进制大写字符)</li>
<li>%e 浮点数字(科学计数法)</li>
<li>%E 浮点数字(科学计数法,用E代替e)</li>
<li>%f 浮点数字(用小数点符号)</li>
<li>%g 浮点数字(根据值的大小采用%e或%f)</li>
<li>%G 浮点数字(类似于%g)</li>
<li>%p 指针(用十六进制打印值的内存地址)</li>
<li>%n 存储输出字符的数量放进参数列表的下一个变量中</li>
</ul>
<h4>2.format()方式</h4>
<p>在python2.6开始,Python中新增加了一个字符串格式化字符的函数str.format(),此函数可以快速的处理各种字符串,增强了字符串格式化的功能。</p>
<p>基本语法是使用{}来替代%。<strong>format函数的实参位置可以不按照顺序</strong></p>
<p>1.使用位置参数</p>
<p><strong>要点</strong>:位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{} {}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">"</span>)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">设置指定位置,按默认顺序</span>
输出为:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello world</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{1} {0}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置指定位置 </span>
输出为:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello world</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{1} {0} {1}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">"</span>) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设置指定位置 </span>
输出为:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">world hello world</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
input</span>=[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">world</span><span style="color: rgba(128, 0, 0, 1)">"</span>] <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">传入位置参数列表可用*列表</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{} {}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(*<span style="color: rgba(0, 0, 0, 1)">input)
输出为:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">hello world</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>
</div>
<p>2.使用关键字参数,类似于使用字典key值占位,将字典作为参数传入字符串</p>
<p><strong>要点</strong>:字符串中的关键字参数要与传入的参数值对得上,可用字典当关键字参数传入值,字典前加**即可</p>
<div class="cnblogs_code">
<pre>hash = {<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name</span><span style="color: rgba(128, 0, 0, 1)">'</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Bingo</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">age</span><span style="color: rgba(128, 0, 0, 1)">'</span>:18<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">my name is {name},age is {age}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Bingo</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age=18<span style="color: rgba(0, 0, 0, 1)">)
输出:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">my name is Bingo,age is 18</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">my name is {name},age is {age}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(**hash)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">通过关键字,并用字典当关键字传入值时,在字典前加**即可</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">my name is Bingo,age is 18</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>
</div>
<h4><strong>3、填充与格式化(:[填充字符][对齐方式 &lt;^&gt;][宽度])</strong></h4>
<p>^、&lt;、&gt;分别是居中、左对齐、右对齐,:号后面带填充的字符,<strong>只能是一个字符,不指定的话默认是用空格填充</strong>,<tt class="docutils literal">对齐方式</tt>后面紧跟一个整数可以限定该字段的宽度。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:*&gt;10}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(9) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">#右对齐</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">*********9</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:*&lt;10}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(9) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">#左对齐</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">9*********</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:*^10}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(9)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">#居中对齐</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">****9*****</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>
</div>
<h4><strong>4、精度与进制</strong></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:.2f}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(1/3<span style="color: rgba(0, 0, 0, 1)">)
输出:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">0.33</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:b}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(10)    <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">二进制</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1010</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:o}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(10)   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">八进制</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">12</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{0:x}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(10)   <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">16进制</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{:,}</span><span style="color: rgba(128, 0, 0, 1)">'</span>.format(12369132698)<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">千分位格式化</span>
输出:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">12,369,132,698</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>
</div>
<h4><strong>5、通过下标</strong></h4>
<div class="cnblogs_code">
<pre>my_list = [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">xiaoming</span><span style="color: rgba(128, 0, 0, 1)">'</span>,18<span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name {0}, age {0}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(my_list) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">通过列表索引设置参数</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">name xiaoming, age 18</span><span style="color: rgba(128, 0, 0, 1)">'</span></pre>
</div>
<p><strong>扩展:</strong></p>
<p>如果字符串里面含有 "{"&nbsp; 或者&nbsp; "}"时,需要把 "{" 和 "}" 字符以 "{{" 和 "}}" 代替。</p>
<p>例如:"{'name1':'{0}','name2':'{1}'}".format('qpy','wjx') 该字符串中包含额外的{},执行该命令后,会报错,解决方法是将{}用{{}}代替,即</p>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style>
<p>"{{'name1':'{0}','name2':'{1}'}}".format('qpy','wjx')</p>
<p>参考:https://www.cnblogs.com/qiujichu/p/10663197.html</p>
<p>https://www.cnblogs.com/Detector/p/8516464.html</p>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style>
<style>p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }</style><br><br>
来源:https://www.cnblogs.com/mianbaoshu/p/12022777.html
頁: [1]
查看完整版本: Python字符串格式方式 %s format()