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

# -----------------使用多个界定符分割字符串--------------------
# 需要更加灵活的切割字符串的时候,最好使用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. Oracle 10g 数据库的备份和还原

    一.备份数据库 1.在图形工具中,如sqldeveloper,pl/sqldeveloper用以下这句查找空表 select 'alter table '||table_name||' allocat ...

  2. ruby配置相关

    1.安装ruby 方式1: yum install ruby 方式2:https://www.ruby-lang.org/en/downloads/ 使用源码安装 ./configure make m ...

  3. mysqldump全量备份+mysqlbinlog二进制日志增量备份

    日常的数据备份及恢复测试,是DBA工作重中之重的事情,所以要做好备份及测试,日常的备份常见有mysqldump+binlog备份.xtrabackup+binlog备份,无论那一种,几乎都少不了对bi ...

  4. Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7

    Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception processVob7 1. 1. javascript异常处理机制 ...

  5. Quartus调用Modelsim SE避免重复编译Altera器件库的方法

    最近用Quartus 15.0配合Modelsim SE 10.4的64位版本,简直就是闪电一般的仿真速度.但是众所周知,SE版本最大的问题就是每次由Quartus自动调用时,都要重新编译所使用的器件 ...

  6. 【LeetCode】Permutations II 解题报告

    [题目] Given a collection of numbers that might contain duplicates, return all possible unique permuta ...

  7. 1. A + B Problem【easy】

    Write a function that add two numbers A and B. You should not use + or any arithmetic operators. Not ...

  8. dbcp 详细配置

    1.配置参数 username : 连接用户名 password:  连接密码 url :  连接 url( 如果连接 mysql ,格式为 jdbc:mysql://ip:port/dbname) ...

  9. Redis的字典扩容与ConcurrentHashMap的扩容策略比较

    本文介绍Redis的字典(是种Map)扩容与ConcurrentHashMap的扩容策略,并比较它们的优缺点. (不讨论它们的实现细节) 首先Redis的字典采用的是一种‘’单线程渐进式rehash‘ ...

  10. Mybatis批量更新<转>

    Mybatis批量更新 批量操作就不进行赘述了.减少服务器与数据库之间的交互.网上有很多关于批量插入还有批量删除的帖子.但是批量更新却没有详细的解决方案. 实现目标 这里主要讲的是1张table中.根 ...