python3字符串操作_在python3中你是如何处理字符串的?也许有你用的到的(三)

字符串(三)

字符串中使用变量

你一定会想到 % 和 字符串的 format() 方法

In [1]: "Hello my name is %(name)s}" % {'name': 'shark'}

Out[1]: 'Hello my name is shark}'

In [2]: "Hello my name is {name}".format(name='xiguatian')

Out[2]: 'Hello my name is xiguatian'

当程序中已经存在被赋值过的变量,可以使用 formt_map() 和 内置函数 vars() 结合使用。

比如:

In [3]: name='shark'

In [4]: age = 18

In [5]: "用户信息:姓名: {name} 年龄: {age}".format_map(vars())

Out[5]: '用户信息:姓名: shark 年龄: 18'

vars() 内置函数还可以用于一个类的实例

class UserInfo:

def __init__(self, name, age):

self.name = name

self.age = age

user = UserInfo('xiguatian', 19)

s = "用户信息:姓名: {name} 年龄: {age}"

user_info = s.format_map(vars(user))

输出结果:

print(user_info)

用户信息:姓名: xiguatian 年龄: 19

但是, format() 和 format_map() 都不能很好的处理确实变量的问题,比如:

In [10]: "用户信息:姓名: {name} 年龄: {age}".format(name='sha

...: rk')

--------------------------------------------------------------

KeyError Traceback (most recent call last)

in ()

----> 1 "用户信息:姓名: {name} 年龄: {age}".format(name='shark')

KeyError: 'age'

所以我们需要写一个类来把 vars() 包装一下, 这里就需要用到特殊函数 __missing__(), 这个方法可以在一个字典中的 key 缺失是返回一个值,这样可以保证程序不会因为确实变量(key)而抛出异常。

具体做法:

class SafeSub(dict): # 继承 dict

"""防止 key 缺失"""

def __missing__(self, key):

return "{%s}" % key

class UserInfo:

def __init__(self, name):

self.name = name

user = UserInfo('xiguatian')

s = "用户信息:姓名: {name} 年龄: {age}"

user_info = s.format_map(SafeSub(vars(user)))

输出内容:

print(user_info)

用户信息:姓名: xiguatian 年龄: {age}

可以看出当有缺失的 key 时, 它会出现在结果中,这显然对调试是很有帮助的,而不是出现一个异常。

如果你发现自己在代码中频繁的执行这些步骤,你可以将变量替换步骤用一个工 具函数封装起来。就像下面这样:

import sys

def sub(text):

return text.format_map(SafeSub(sys._getframe(1).f_locals))

只要这样使用

name = 'xiguatian'

print(sub("{name}{other}"))

xiguatian{other} # 打印出来的内容

以指定列宽格式化字符串

假如你有一些长字符串,想以指定的列宽将它们重新格式化。

textwrap 模块可以满足你

有如下字符串:

say = """曾经流行过这么一段话:

你可以和那个生病时替你着急,心疼你挤公交,嘱咐你多喝热水,提醒你雨天带伞的人谈恋爱。

但你一定要和那个心疼你挤公交,开车接送你上下班;下厨给你做好吃的;生病的时候喂你吃药,陪在你身边;阴雨天为你送伞的男人结婚。

"""

没有指定列宽的输出结果:

image.png

指定列宽后的结果:

image.png

首行缩进

image.png

最多显示几行

image.png

textwrap.fill() 的更多参数

def __init__(self,

width=70,

initial_indent="",

subsequent_indent="",

expand_tabs=True,

replace_whitespace=True,

fix_sentence_endings=False,

break_long_words=True,

drop_whitespace=True,

break_on_hyphens=True,

tabsize=8,

*,

max_lines=None,

placeholder=' [...]'):

结合你的终端大小进行输出

>>> import os

# 获取终端大小,记得只可以在终端中使用

>>> col = os.get_terminal_size().columns

>>> print(textwrap.fill(say, col)) # 要使用 print 函数

字符串的常用操作已完结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值