详解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 相关文章推荐
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
Django如何实现内容缓存示例详解
Sep 24 Python
python基础教程项目二之画幅好画
Apr 02 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
python高阶爬虫实战分析
Jul 29 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
Python 中由 yield 实现异步操作
May 04 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
对Python 字典元素进行删除的方法
Jul 31 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
vue实现商城上货组件简易版
2017/11/27 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python制作爬虫采集小说
2015/10/25 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Django实现表单验证
2018/09/08 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python 从attribute到property详解
2020/03/05 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Python定义一个函数的方法
2020/06/15 Python
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
《湘夫人》教学反思
2014/02/21 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
Go并发4种方法简明讲解
2022/04/06 Golang
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技