第一章
文本
1.1 string:文本常量和模板
1.2 textwrap:格式化文本段落
1.3 re:正则表达式
1.4  difflib:比较序列
str类,
string.Template
textwrap
difflib
----------------------
1.1 string:文本常量和模板
string模块中 str模块中
函数capwords()
-------------------
Jupyter note   ---  丘比特笔记本
第一章
文本处理工具:str类
string.Template 简便的方法来构建比str对象特性更丰富的字符串。
Web框架定义的模板或Python Package Index提供的扩展模块相比,尽管string.Template没有那么丰富的特性,但它确实能很好地支持用户可修改的模板,这些模板需要将动态值插入到静态文本中。
textwrap模块包含格式化段落文本的工具,可以限制输出的宽度、增加缩进,以及插入换行符从而能一致地自动换行。
1.1 string:文本常量和模板
string模块在最早的Python版本中就已经有了。以前这个模块中提供的很多函数已经移植为str对象的方法,不过这个模块仍保留了很多有用的常量和类来处理str对象。这里将重点讨论这些常量和类。
 
1.1.1 函数
    函数capwords()会把一个字符串中的所有单词首字母大写。
       代码清单 1-1:string_capwords.py
       --------------------------------
       import string
       s = 'The quick brown fox jumped over the lazy dog.'
       print(s)
       print(string.capwords(s))
       --------------------------------
       结果:
       The quick brown fox jumped over the lazy dog.
       The Quick Brown Fox Jumped Over The Lazy Dog.
------------------------------------------
这个代码的结果等同于先调用split(),把结果列表中的单词首字母大写,然后调用join()来合并结果。
1.1.2 模板
PEP 292:更简单的字符串替换。
字符串模板是PEP 292新增的部分,将作为内置拼接语法的代替做法。使用string.Template拼接时,要在名字前面加前缀$来标识变量(例如,$var)。或者,如果有必要区分变量和周围的文本,可以用大括号
包围变量(例如,${var})。
下面这个例子对一个简单模板,使用%操作符的类似字符串拼接以及使用str.format()的新格式化字符串语法做了比较:
string.Template
       代码清单1-2:string_template.py
       ------------------------------
       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}siable
       """
       
       print('FORMAT:', s.format(**values))
       -----------------------------------
在前面两种情况中,触发字符($或%)要重复两次来进行转义。在格式化语法中,需要重复{和}来转义。
-----------------------------------------------
TEMPLATE:
Variable  :foo
Escape    :$
Variable in text :fooiable
INTERPOLATION
Variable  :foo
Escape  :%
Variable in text :fooiable       
FORMAT:
Variable  : %foo
Escape    : {}
Variable in text :foosiable
-------------------------------------------------
模板与字符串拼接或格式化的一个关键区别是,它不考虑参数的类型。值会转换为字符串,再将字符串插入结果。这里没有提供格式化选项。例如,没有办法控制使用几位有效数字来表示一个浮点值。
不过,这也有一个好处,通过使用sfe_substitute()方法,可以避免未能向模板提供所需的所有参数值时可能产生的异常。
-------------------------------------------------
       代码清单1-3:string_template_missing.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))
       ---------------------------------------
       结果:
       ERROR: 'missing'
       safe_substitute(): foo is here but $missing is not provided
       ---------------------------------------
由于values字典中没有missing的值,所以substitute()会产生一个KeyError。safe_substitute()则不同,它不会抛出这个错误,而是会捕获这个错误并保留文本中的变量表达式。
1.1.3 高级模板
可以调整string.Template在模板体中查找变量名所使用的正则表达式模式,以改变它的默认语法。为此,一种简单的方法是修改delimiter和idpattern类属性。
       代码清单1-4:string_template_advanced.py
       -----------------------------------------
       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))
       ------------------------------------------
       Modified ID pattern:
       Delimiter : %
       Replaced  : replaced
       Ignored   : %notunderscored
       ------------------------------------------
在这个例子中,替换规则已经改变,定界符是%而不是$,而且变量名中间的某个位置必须包含一个下划线。模式%notunderscored不会被替换为任何字符串,因为它不包含下划线字符。
要完成更复杂的修改,可以覆盖pattern属性并定义一个全新的正则表达式。所提供的模式必须包含4个命名组,分别捕获转义定界符、命名变量、加括号的变量名和不合法的定界符模式。
  
1.2 textwrap:格式化文本段落
fill()函数取文本作为输入,生成格式化文本作为输出。
1.2.3 去除现有的缩进
dedent()
docstring
dedent()   去除缩进
indent()   缩进
_Line_one.
___Line_one.
_Line_three.
 
1.2.4 结合dedent和fill
1.2.5   缩进块
indent()
文本的第一行,缩进。
>
1.2.7  截断长文本
1.3 re:正则表达式
regex 或  regexp
sed  grep 和 awk
Perl  Ruby Awk Tcl
C C++ Python
1.3.1 查找文本中的模式
compile() 函数
RegexObject
1.3.3 多重匹配
findall()函数
1.3.4.1 重复
{m,n}
{m,}
  

Python 3标准库课件第一章的更多相关文章

  1. Python 3标准库课件第一章(第二版)

    第一章文本1.1 string:文本常量和模板1.2 textwrap:格式化文本段落1.3 re:正则表达式1.4  difflib:比较序列str类,string.Templatetextwrap ...

  2. Python 3标准库课件第二章

    整理第一章我又觉得烦,我就看第二章了,灰头土脸的,第二章一.如列表(list).元组(tuple).字典(dict).集合(set)二.2.1 enum:枚举类型 enum模块定义了一个提供迭代和比较 ...

  3. Python 3标准库第四章

    第四章日期和时间-----------------    不同于int.float和str,Python没有包含对应日期和时间的原生类型,不过提供了3个相应的模块,可以采用多种表示来管理日期和时间值. ...

  4. Python 3标准库课件

    开课前的一些讲话: 一.大家晚上好,首先非常的荣幸能够在网易云平台开设讲解Python的这门课程,我也是第一次讲解哦,下面说说我讲解课程的原因,1.因为我发现市场上讲解Python的课程很多,不过,大 ...

  5. Python 3标准库 第五章 数学运算

    第五章数学运算-----------------------上下文解释:编程时,我们一般也是先给程序定义一些前提(环境变量.描述环境变化的全局变量等),这些“前提”就是上文,然后再编写各功能模块的代码 ...

  6. Python 3标准库第三章

    时间过得很快,又是一周过去了,今天感觉迷迷糊糊的,不在状态,然后,下面开始我们的讲解,还是跟大家分享一下我自己的一些想法,第一.怎么讲了,就是各位如果有怀才不遇的想法,我感觉最好不要有这种想法;第二. ...

  7. Python 3标准库 第十一章 网路通信

    网路通信11.1 ipaddress  : Internet 地址 ipaddress模块提供了处理IPv4和IPv6 11.1.2  网络 CMDB  11.2  socket:网络通信 11.2. ...

  8. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  9. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

随机推荐

  1. [原创]关于类似方程x+y+z=P的解的总解

    1:如果x,y,z>=0,则直接插板法c(P+3,3-1)2:如果x,y,z均有下界a1,a2,a3,则求解方程x+y+z=P-a1-a2-a33:如果x,y,z均有上界的自然数,则使用容斥定理 ...

  2. 使用注解@CrossOrigin解决跨域问题

    转一个大兄弟写的贴子,总结得很好,很全面 https://www.cnblogs.com/mmzs/p/9167743.html 作者: 淼淼之森

  3. Linux进程后台执行nohup(OpenTSDB后台运行方法)

    1.问题描述 OpenTSDB执行./tsdb tsd启动之后,占有控制台执行并且Ctrl+C后就退出了,关闭控制台同样会退出. 2.解决方法(在/opt/module/opentsdb-2.3.1/ ...

  4. 小记---------关于linux 定时任务crontab

    linux的crontab定时任务    启动服务: service crond start    关闭服务:  service crond stop    重启服务:  service crond ...

  5. java学习笔记 - 线程池(一)

    线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销 优点:(面试题)可重复使用已有线程,避免对象创建.消亡和过度切换的性能开 ...

  6. 洛谷 P2647 最大收益 题解

    题面 对于“n个物品选任意个”我们就可以想到一种递推方法,即设f[i][j]表示前i个物品选j个的最大收益 我们发现正着转移并不好转移,我们可以倒着转移,使选择的当前第i号物品为第一个物品,这样的话我 ...

  7. C++中的数据类模板

    1,预备知识: 1,模板参数可以是数值型参数(非类型参数): 1,代码示例: template <typename T, int N> void func() { T a[N]; // 使 ...

  8. python格式化当前时间,暂停一秒输出

    python格式化输出当前系统时间,可以实现暂停1秒输出时间 import timefor i in range(10): print(time.strftime("%Y-%m-%d %H: ...

  9. Day2_数字类型_字符串类型_列表类型

    数字类型: 作用:年纪,等级,薪资,身份证号等: 10进制转为2进制,利用bin来执行. 10进制转为8进制,利用oct来执行. 10进制转为16进制,利用hex来执行. #整型age=10 prin ...

  10. Swoole开启守护进程后如何关闭

    查找相应端口号对应的PID(以我的为例,我的是9501端口) netstat -apn | 清除这个进程 启动客户端这时就会报错连不上了,证明服务已关