zoukankan      html  css  js  c++  java
  • Python 3标准库课件第一章(第二版)

    第一章
    文本
    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,}
    ------------------------
    忙了一天,我们单位的灾备环境,系统要做联通性测试,
    气氛要轻松一点,语言要欢快一点,心情要开心一点,
    ------------------------
    学习、成长的过程,
    ------------------------
    1.3.4.1    重复
    元字符*:

    {m}
    {m,n}
    ({m,})
    贪心形式的表达式(a[ab]+)
    1.3.4.3   转义码
         表 1-1  正则表达式转义码
      转义码             含义
      d     数字
      D     非数字
      s     空白符(制表符、空格、换行等)
      S                 非空白符
      w                 字母数字
      W                 非字母数字
    -----------------------------------------
    1.3.4.4 锚定
    ---------------------
     表 1-2 正则表达式锚定码
     锚定码    含义
     ^     字符串或行的开头
     $     字符串或行末尾
     A      字符串开头
          字符串末尾
          单词开头或末尾的空串
     B     不在单词开头或末尾的空串
    ----------------------------
    1.3.5  限制搜索
    ----------------------------
    match.groups()按匹配字符串的组在表达式中的顺序返回一个字符串序列。
    ----------------------------
    1.3.7  搜索选项
    ----------------------------
    可以使用位或(OR)
    compile()、search()、match()
    ----------------------------
    IGNORECASE会使模式中的字面量字符以及字符区间与大小写字符都匹配。
    ----------------------------
     嵌入标志可以放在同一个组中结合使用。
          
          表1-3 正则表达式缩写
    ---------------------------------------------------------------------------
       标志       缩写
       ASCII       a
       IGNORECASE       i
       MULTILINE      m
       DOTALL       s
       VERBOSE       x
    -----------------------------------------------------------------------------
    1.3.8 前向或后向
    -----------------------------------------------------------------------------
       表1-4 difflib.get_opcodes()指令
       --------------------------------
       操作码                      定义
       'replace'            将a[i1:i2]替换为b[j1:j2]
       'delete'             完全删除a[i1:i2]
       'insert'             将b[j1:j2]插入a[i1:i2]
       'equal'              两个序列已经相等
    --------------------------------------------------
  • 相关阅读:
    用js实现广告图片后加载
    Sql server存储过程和C#分页类简化你的代码
    SQL Server 1069 错误(由于登录失败而无法启动服务)解决方法
    ASP.NET编程中的十大技巧
    ASP.NET通用分页程序
    asp.net中使用SPLIT这个函数把一个字符串分成数组
    win2003+iis6服务器设置问题集
    一个较优雅的GridView隐藏列取值解决方案
    ACCESS的iif语句转到SQL语句!!!
    SCOPE_IDENTITY 和 @@IDENTITY
  • 原文地址:https://www.cnblogs.com/niaocaizhou/p/11714599.html
Copyright © 2011-2022 走看看