# ===================第二章:字符串和文本======================

# -----------------使用多个界定符分割字符串--------------------
# 需要更加灵活的切割字符串的时候,最好使用re.split() 方法
import re
line = 'asdf fjdk; afed, fjek,asdf, foo'
line_list = re.split(r'[;,\s]\s*', line)
print(line_list) # -----------------字符串开头或结尾匹配---------------------
# 检查字符串开头或结尾的一个简单方法是使用str.startswith() 或者是str.endswith() 方法
# 如果想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传给startswith() 或者endswith()
# 类似的操作也可以使用切片来实现
list_file = ['a.py', 'b.txt', 'c.pyc', 'd.java']
file_tuple = ('.py', '.java')
file_list = [name for name in list_file if name.endswith(file_tuple)]
print(file_list) # ------------------用shell通配符匹配字符串-------------------
# fnmatch 模块提供了两个函数—— fnmatch() 和fnmatchcase() ,可以用来实现这样的匹配
from fnmatch import fnmatch, fnmatchcase
flag1 = fnmatch('file.txt', '*.txt')
print(flag1)
flag2 = fnmatch('Dat45.csv', 'Dat[0-9][0-9].c*')
print(flag2)
# fnmatch() 函数使用底层操作系统的大小写敏感规则(不同的系统是不一样的) 来匹配模式
# 如果你对这个区别很在意,可以使用fnmatchcase() 来代替
# fnmatch() 函数匹配能力介于简单的字符串方法和强大的正则表达式之间 # ------------------字符串匹配和搜索---------------------------
# 如果想匹配的是字面字符串,那么通常只需要调用基本字符串方法就行,比如str.find() , str.endswith() , str.startswith() 或者类似的方法
# 对于复杂的匹配需要使用正则表达式和re 模块
import re
# 将模式字符串预编译为模式对象
datepat = re.compile(r'\d+/\d+/\d+')
text1 = '11/27/2012'
text2 = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
# match() 总是从字符串开始去匹配,如果想查找字符串任意部分的模式出现位置,使用findall() 方法去代替
result1 = re.match(datepat, text1).group()
print(result1)
result2 = re.findall(datepat, text2)
print(result2)
# 在定义正则式的时候,通常会利用括号去捕获分组
datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
m = datepat.match(text1)
print(m.group(0))
print(m.groups())
print(m.group(1))
print(m.group(2))
print(m.group(3))
# 如果想以迭代方式返回匹配,可以使用finditer() 方法来代替 # -------------字符串搜索和替换-------------------
# 对于简单的字面模式,直接使用str.repalce() 方法即可
text= 'yeah, but no, but yeah, but no, but yeah'
text_replace = text.replace('yeah', 'hello world')
print(text_replace)
# 对于复杂的模式,请使用re 模块中的sub() 函数
import re
text_1 = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
text_2 = datepat.sub(r'\3-\1-\2', text_1)
print(text_2)
print(re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text_1)) # --------------字符串忽略大小写的搜索替换-----------------
# 为了在文本操作时忽略大小写,需要在使用re 模块的时候给这些操作提供re.IGNORECASE 标志参数
text = 'UPPER PYTHON, lower python, Mixed Python'
list_1 = re.findall('python', text, flags=re.IGNORECASE)
print(list_1)
print(re.sub('python', 'Hello world', text, flags=re.IGNORECASE)) # --------------删除字符串中不需要的字符---------------------
# strip() 方法能用于删除开始或结尾的字符
s = ' hello world \n'
print(s.strip())
# 如果想处理中间的空格,那么需要求助其他技术。比如使用replace() 方法或者是用正则表达式替换 # ----------------------字符串对齐----------------------------
# 对于基本的字符串对齐操作,可以使用字符串的ljust() , rjust() 和center()方法
text = 'Hello World!'
print(text.ljust(20, '='))
# 函数format() 同样可以用来很容易的对齐字符串。你要做的就是使用<,> 或者ˆ 字符后面紧跟一个指定的宽度
print(format(text, '*^20s')) # 合并拼接字符串
# 如果合并的字符串是在一个序列或者iterable 中,那么最快的方式就是使用join() 方法
parts = ['Is', 'Chicago', 'Not', 'Chicago?']
parts_str = ' '.join(parts)
print(parts_str)
# 如果仅仅只是合并少数几个字符串,使用加号(+) 通常已经足够了
# 需要引起注意的是,当我们使用加号(+) 操作符去连接大量的字符串的时候是非常低效率的,因为加号连接会引起内存复制以及垃圾回收操作 # ----------------------字符串中插入变量-----------------------------
s = '{name} has {n} message.'
print(s.format(name='qf', n=18)) # ----------------------以指定列宽格式化字符串-----------------------
# 使用textwrap 模块来格式化字符串的输出
import textwrap
s = "Look into my eyes, look into my eyes, the eyes, the eyes, \
the eyes, not around the eyes, don't look around the eyes, \
look into my eyes, you're under."
print(textwrap.fill(s, 70))

Python--进阶处理2的更多相关文章

  1. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  2. Python进阶 - 对象,名字以及绑定

    Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...

  3. Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super 写在前面 如非特别说明,下文均基于Python3 摘要 本文讲述Python继承关系中如何通过super()调用"父类"方法,supe ...

  4. Python进阶 - 命名空间与作用域

    Python进阶 - 命名空间与作用域 写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空 ...

  5. python进阶学习笔记(一)

    python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...

  6. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  7. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  8. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  9. 【python进阶】深入理解系统进程2

    前言 在上一篇[python进阶]深入理解系统进程1中,我们讲述了多任务的一些概念,多进程的创建,fork等一些问题,这一节我们继续接着讲述系统进程的一些方法及注意点 multiprocessing ...

  10. Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

随机推荐

  1. HTML中css和js链接中的版本号

    背景 在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候, 浏览器 ...

  2. Struts2使用OGNL遍历各种map总结

    一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList;   import java.ut ...

  3. 1.3 Seven Testing Principles

    1.3 Seven Testing Principles 2015-06-23 Principle 1 - Testing shows presence of defects(测试显示存在缺陷) Te ...

  4. 0064 MyBatis动态SQL--choose-when-otherwise--foreach--set--bind

    读写数据库的时候,往往要根据传入的参数的不同,改变sql语句. 比如:如果传入了某个参数值,那就查询对应的字段,没传入,那就不查,这就是0048中的where--if 再比如: 如果传入了某个参数值, ...

  5. logcat的调试 比较有用的几个命令

    网上很多的logcat调试命令,但是太多的命令只会令人盐杂. (主要是adt工具带的调试功能容易死掉 每次都要重启太烦) 个人认为有一下几个常用命令: adb logcat -c 清除所有以前的日志 ...

  6. 简单实现Spring中BeanFactory原理

    上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring ...

  7. 虚拟机和Docker的异同

    [摘要]各种虚拟机技术开启了云计算时代:而Docker,作为下一代虚拟化技术,正在改变我们开发.测试.部署应用的方式.那虚拟机与Docker究竟有何不同呢? 首先,大家需要明确一点,Docker容器不 ...

  8. js 去掉数组中重复的对象

    function deteleObject(obj) { // console.log(obj) var uniques = []; var stringify = {}; ; i < obj. ...

  9. 对session的操作

    request.getSession().removeAttribute("amount");request.getSession().setAttribute("amo ...

  10. C#调用系统API

    API简介 1) C#中的简单数据类型与API中的数据类型对应关系 2) 如何在调用API时传递复杂参数:封装类.结构和联合 3) 如何调用API 4) 如何确保成功调用API