说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 程序中处理的最多的数据就是文本,标准库string可以帮助你轻松地完成高级文本处理。除了完成字符的格式化,还可以使用string.Template作为一种简便方法来构建比str对象特性更丰富的字符串。
string 标准库提供了一些最为常用的字符串,让我们可以直接使用,而不用再去自己构造和定义编写这些字符串,像在生成随机码、格式验证等场景下非常好用。
import string
# 空格-包含所有ASCII空格的字符串
string.whitespace # ' \t\n\r\v\f'
# ' \t\n\r\x0b\x0c'
# 包含所有ASCII字母的字符串
string.ascii_letters
# 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 包含所有ASCII小写字母的字符串
string.ascii_lowercase
# 'abcdefghijklmnopqrstuvwxyz'
# 包含所有ASCII大写字母的字符串
string.ascii_uppercase
# 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 包含所有ASCII十进制数字的字符串
string.digits # '0123456789'
# 包含所有ASCII十六进制数字的字符串
string.hexdigits
# '0123456789abcdefABCDEF'
# 包含所有ASCII八进制数字的字符串
string.octdigits # '01234567'
# 包含所有ASCII标点符号的字符串
string.punctuation
# '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 包含所有可打印的ASCII字符的字符串
# 即:digits + ascii_letters + punctuation + whitespace
string.printable # 注:为排版面换行
'''
'0123456789abcdefghijklmnopqrstuv
wxyzABCDEFGHIJKLMNOPQRSTUVW
XYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}
~ \t\n\r\x0b\x0c'
'''
string.capwords(s, sep=None) 把一个字符串中的所有单词首字母大写:
words = 'My name is Hanmeimei'
string.capwords(words)
# 'My Name Is Hanmeimei'
使用 str.split() 将参数拆分为单词,使用 str.capitalize() 将单词转为大写形式,使用 str.join() 将大写的单词进行拼接。 如果可选的第二个参数 sep 被省略或为 None,则连续的空白字符会被替换为单个空格符并且开头和末尾的空白字符会被移除,否则 sep 会被用来拆分和拼接单词。
string 模块中的 Formatter 类允许你使用与内置的字符串的 format() 方法相同的实现来创建并定制你自己的字符串格式化行为。
Formatter.format方法和str.format并没有什么不同,他们的语法是通用的。format方法是string.Formatter类中的主要方法:
f = string.Formatter()
f.format('我是{}人', '中国')
# '我是中国人'
f.vformat('我是{country}人', (), {'country':'中国'})
# 我是中国人
f.vformat('我{}岁,{country}人', (18, 19), {'country':'中国'})
f.vformat('我{}岁,{}人', (18, '中国'), {})
# '我18岁,中国人'
f.get_field('country', (), {'country':'中国', 'age':18})
# ('中国', 'country')
f.get_field('age', (), {'country':'中国', 'age':18})
# (18, 'age')
f.get_value('country', (), {'country':'中国', 'age':18})
# '中国'
f.get_value('age', (), {'country':'中国', 'age':18})
# 18
f.convert_field(19, 's') # s/r/a
# '19'
parse(format_string)循环遍历 format_string 并返回一个由可迭代对象组成的元组 (literal_text, field_name, format_spec, conversion)。
for i in f.parse('我是{country:3}人'):
print(i)
'''
('我是', 'country', '3', None)
('人', None, None, None)
'''
format_field(value, format_spec):format_field() 会简单地调用内置全局函数 format()。 提供该方法是为了让子类能够重载它。
string.Template 将一个string设置为模板,通过一个字典替换变量的方法,最终得到想要的字符串:
template = '$who is $age years old.'
s = string.Template(template)
d = {'who': 'Amy', 'age': 7}
s.substitute(d)
s.substitute(who='Amy', age=7) # 同上
# 'Amy is 7 years old.'
safe_substitute 可以忽略不能匹配的错误:
template = '$who is $age years $old.'
s = string.Template(template)
d = {'who': 'Amy', 'age': 7}
s.substitute(d)
# KeyError
s.safe_substitute(d)
# 'Amy is 7 years $old.'
默认的定界符为 $ 为转义符号;它会被替换为单个的 $。如果想修改定界符号可以通过继承的方法重写 delimiter 的值:
class MyTemplate(string.Template):
delimiter = '#' # 修改为井号
s = MyTemplate('Hello #who')
s.substitute(who='World')
# 'Hello World'
作为基于模板字符串构建以实现 i18n(国际化)的库的一个示例,请参看 flufl.i18n 三方包。
更新时间:2020-11-29 22:44:24 标签:Python 内置库 文本