详解Python中string模块除去Str还剩下什么


Posted in Python onNovember 30, 2020

string模块可以追溯到早期版本的Python。
以前在本模块中实现的许多功能已经转移到str物品。
这个string模块保留了几个有用的常量和类来处理str物品。

字符串-文本常量和模板

目的:包含用于处理文本的常量和类。

功能

功能capwords()将字符串中的所有单词大写。
字符串capwords.py

import string

s = 'The quick brown fox jumped over the lazy dog.'

print(s)
print(string.capwords(s))

结果与调用split(),将结果列表中的单词大写,然后调用join()把结果结合起来。

$ python3 string_capwords.py

The quick brown fox jumped over the lazy dog.
The Quick Brown Fox Jumped Over The Lazy Dog.

模板

字符串模板作为PEP 292作为内建内插语法的替代。带着string.Template内插,变量通过在名称前加上(例如,(例如,(例如,var)。或者,如果需要的话,也可以用花括号(例如,${var}).
此示例使用%运算符和新的格式字符串语法。str.format().

#字符串模板

import string

values = {'var': 'foo'}

t = string.Template("""
Variable    : $var
Escape     : $$
Variable in text: ${var}iable
""")

print('TEMPLATE:', t.substitute(values))

s = """
Variable    : %(var)s
Escape     : %%
Variable in text: %(var)siable
"""

print('INTERPOLATION:', s % values)

s = """
Variable    : {var}
Escape     : {{}}
Variable in text: {var}iable
"""

print('FORMAT:', s.format(**values))

在前两种情况下,触发器字符($或%)是通过重复两次来逃脱的。对于格式语法,两者都是{和}需要通过重复它们来逃脱。

$ python3 string_template.py

TEMPLATE:
Variable    : foo
Escape     : $
Variable in text: fooiable

INTERPOLATION:
Variable    : foo
Escape     : %
Variable in text: fooiable

FORMAT:
Variable    : foo
Escape     : {}
Variable in text: fooiable

模板与字符串内插或格式化之间的一个关键区别是,参数的类型没有被考虑在内。将值转换为字符串,并将字符串插入到结果中。没有可用的格式设置选项。例如,无法控制用于表示浮点值的数字数。

不过,有一个好处是,使用safe_substitute()方法可以避免异常,如果不是以参数形式提供模板所需的所有值。

#字符串模板丢失.py

import string

values = {'var': 'foo'}

t = string.Template("$var is here but $missing is not provided")

try:
  print('substitute()   :', t.substitute(values))
except KeyError as err:
  print('ERROR:', str(err))

print('safe_substitute():', t.safe_substitute(values))

因为没有价值missing在值字典中,KeyError是由substitute()。

而不是提高错误,safe_substitute()捕获它并将变量表达式单独保留在文本中。

$ python3 string_template_missing.py

ERROR: 'missing'
safe_substitute(): foo is here but $missing is not provided

高级模板

string.Template可以通过调整用于在模板正文中查找变量名称的正则表达式模式来更改。一个简单的方法是更改delimiter和idpattern类属性。

#字符串模板

import string


class MyTemplate(string.Template):
  delimiter = '%'
  idpattern = '[a-z]+_[a-z]+'


template_text = '''
 Delimiter : %%
 Replaced : %with_underscore
 Ignored  : %notunderscored
'''

d = {
  'with_underscore': 'replaced',
  'notunderscored': 'not replaced',
}

t = MyTemplate(template_text)
print('Modified ID pattern:')
print(t.safe_substitute(d))

在本例中,替换规则被更改,因此分隔符是%而不是$变量名必须包括中间的下划线。

模式%notunderscored不会被任何东西替换,因为它不包含下划线字符。

$ python3 string_template_advanced.py

Modified ID pattern:

 Delimiter : %
 Replaced : replaced
 Ignored  : %notunderscored

对于更复杂的更改,可以重写pattern属性并定义一个全新的正则表达式。

提供的模式必须包含四个命名组,用于捕获转义分隔符、命名变量、变量名的大括号版本和无效分隔符模式。

#字符串模板_defaultpattern.py

import string

t = string.Template('$var')
print(t.pattern.pattern)

价值t.pattern是已编译的正则表达式,但原始字符串可通过其pattern属性。

\$(?:
 (?P<escaped>\$) |        # two delimiters
 (?P<named>[_a-z][_a-z0-9]*)  | # identifier
 {(?P<braced>[_a-z][_a-z0-9]*)} | # braced identifier
 (?P<invalid>)          # ill-formed delimiter exprs
)

此示例定义一个新模式以创建一种新类型的模板,使用{{var}}作为变量语法。

#字符串模板_newsyntax.py

import re
import string


class MyTemplate(string.Template):
  delimiter = '{{'
  pattern = r'''
  \{\{(?:
  (?P<escaped>\{\{)|
  (?P<named>[_a-z][_a-z0-9]*)\}\}|
  (?P<braced>[_a-z][_a-z0-9]*)\}\}|
  (?P<invalid>)
  )
  '''


t = MyTemplate('''
{{{{
{{var}}
''')

print('MATCHES:', t.pattern.findall(t.template))
print('SUBSTITUTED:', t.safe_substitute(var='replacement'))

named和braced模式都必须单独提供,即使它们是相同的。运行示例程序将生成以下输出:

$ python3 string_template_newsyntax.py

MATCHES: [('{{', '', '', ''), ('', 'var', '', '')]
SUBSTITUTED:
{{
replacement

格式化程序

这个Formatter类实现与format()方法str。它的功能包括类型强制、对齐、属性和字段引用、命名和位置模板参数以及特定于类型的格式选项。大多数时候format()方法是这些特性的更方便的接口,但是Formatter作为构建子类的一种方法,用于需要变体的情况下。

常数

这个string模块包括一些与ASCII和数字字符集相关的常量。

#字符串常数.py

import inspect
import string


def is_str(value):
  return isinstance(value, str)


for name, value in inspect.getmembers(string, is_str):
  if name.startswith('_'):
    continue
  print('%s=%r\n' % (name, value))

这些常量在处理ASCII数据时很有用,但是由于在某种形式的Unicode中遇到非ASCII文本越来越常见,因此它们的应用受到限制。

$ python3 string_constants.py

ascii_letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW
XYZ'

ascii_lowercase='abcdefghijklmnopqrstuvwxyz'

ascii_uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

digits='0123456789'

hexdigits='0123456789abcdefABCDEF'

octdigits='01234567'

printable='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ
RSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

punctuation='!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

whitespace=' \t\n\r\x0b\x0c'

到此这篇关于详解Python中string模块除去Str还剩下什么的文章就介绍到这了,更多相关Python string模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
插入排序_Python与PHP的实现版(推荐)
May 11 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
Face++ API实现手势识别系统设计
Nov 21 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
python之信息加密题目详解
Jun 26 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
Python控制台实现交互式环境执行
Jun 09 Python
Python中bisect的用法及示例详解
Jul 20 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 Python
使用django自带的user做外键的方法
Nov 30 #Python
python 实现简易的记事本
Nov 30 #Python
详解pycharm自动import所需的库的操作方法
Nov 30 #Python
Django REST Framework 分页(Pagination)详解
Nov 30 #Python
python代码实现猜拳小游戏
Nov 30 #Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 #Python
python 如何引入协程和原理分析
Nov 30 #Python
You might like
探讨方法的重写(覆载)详解
2013/06/08 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python3实现生成随机密码的方法
2014/08/23 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
《盘古开天地》教学反思
2014/02/28 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
初婚初育证明范本
2014/11/24 职场文书
担保书范文
2015/01/20 职场文书
运动会宣传稿50字
2015/07/23 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书