1.一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的

#string 对象的split()方法只适应于非常简单的字符串分割情形,它并不允许有 多个分隔符或者是分隔符周围不确定的空格。当你需要更加灵活的切割字符串的时候最好使用re.split()方法
line = 'asdf fjdk; afed, fjek,asdf, foo'
import re
list_line = re.split(r'[;,\s]\s*',line)
print(list_line)

2.你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等

filename = 'spam.txt'
print(filename.endswith('.txt')) #True
print(filename.startwith('file'))#Farse

#想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去,然后传给startswith()或者 endswith() 方法
import os
filenames = os.listdir('.')
list_1 =[name for name in filenames if name.endswith(('.c', '.h')) ]
print(any(name.endswith('.py') for name in filenames))#True


from urllib.request import urlopen
def read_data(name):
if name.startswith(('http:', 'https:', 'ftp:')):#必须要输入一个元组作为参数
return urlopen(name).read()

3.对于复杂的匹配需要使用正则表达式和 re 模块,

核心步骤就是先使用 re.compile() 编译正则 表达式字符串,然后使用 match() , findall() 或者 finditer() 等方法

match() 总是从字符串开始去匹配。

search(),从整体中匹配返回第一次匹配到的结果。

在定义正则式的时候,通常会利用括号去捕获分组。

datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
m = datepat.match('11/27/2012')
m.group(0)
m.group(1)
m.group(2)
m.group(3)
m.groups()

4.在字符串中搜索和匹配指定的文本模式

text = 'yeah, but no, but yeah, but no, but yeah'
text.replace('yeah','ok')#对于简单的字面模式,直接使用 str.repalce() 方法即可 text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
import re
text = re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\2-\1',text)#对于复杂的模式,请使用 re 模块中的 sub() 函数,反斜杠数字比如 \3 指向前面模式的捕获组号
print(text)#Today is 2012-27-11. PyCon starts 2013-13-3.

datepat = re.compile(r'(\d+)/(\d+)/(\d+)')#打算用相同的模式做多次替换,考虑先编译它来提升性能
datepat.sub(r'\3-\1-\2', text)
#对于更加复杂的替换,可以传递一个替换回调函数来代替
from calendar import month_abbr
def change_date(m):
  mon_name = month_abbr[int(m.group(1))]
  return '{} {} {}'.format(m.group(2), mon_name, m.group(3))
newtext = datepat.sub(change_date, text)#'Today is 27 Nov 2012. PyCon starts 13 Mar 2013

5.某种对齐方式来格式化字符串:对于基本的字符串对齐操作,可以使用字符串的 ljust() , rjust() 和 center() 方法

text = 'Hello World'
text.ljust(20,'>') #'Hello World>>>>>>>'
text.rjust(20,'<')#'<<<<<<<<Hello World
text.center(20,'*')#' ****Hello World*****' #函数 format() 同样可以用来很容易的对齐字符串。你要做的就是使用 <,> 或者ˆ 字符后面紧跟一个指定的宽度
format(text, '>20')#' Hello World'

#当格式化多个值的时候,这些格式代码也可以被用在 format() 方法中
'{:>10s} {:>10s}'.format('Hello', 'World')#' Hello World'

#format() 函数的一个好处是它不仅适用于字符串。它可以用来格式化任何值,使得它非常的通用。比如,你可以用它来格式化数字:
x = 1.2345
format(x, '>10')#' 1.2345'
format(x, '^10.2f')#' 1.23 '

    print("The total value of your change is ${0:0.2f}".format(total))#The total value of your change is $1.50

  索引 0 用于表示第一个(也是唯一的)参数插入该插槽,格式说明符为 0.2f。 此说明符的格式为<宽度>.<精度><类型>。宽度指明值应占用多少“空间”。如果值小于指 定的宽度,则用额外的字符填充(空格是默认值)。如果值需要的空间比分配的更多,它会 占据显示该值所需的空间。所以在这里放置一个 0 基本上是说“使用你需要的空间”。精度 是2 ,这告诉 Python 将值舍入到两个小数位。最后,类型字符 f 表示该值应显示为定点数。 这意味着,将始终显示指定的小数位数,即使它们为 0

6.几个小的字符串合并为一个大的字符串:你想要合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使 用 join() 方法

parts = ['Is', 'Chicago', 'Not', 'Chicago?']
' '.join(parts)#'Is Chicago Not Chicago?'

 
#你仅仅只是合并少数几个字符串,使用加号 (+) 通常已经足够了
a = 'Is Chicago'
b = 'Not Chicago?'
a + ' ' + b #'Is Chicago Not Chicago?'

7.创建一个内嵌变量的字符串,变量被它的值所表示的字符串替换掉

s = '{name} has {n} messages.'
s.format(name='Guido', n=37)#Python 并没有对在字符串中简单替换变量值提供直接的支持。但是通过使用字符串的 format() 方法来解决这个问题

name = 'songshichao'
n = 18
'%(name) has %(n) messages.' % vars()#'songshichao has 18 messages.' #或者
import string
s = string.Template('$name has $n messages.')
s.substitute(vars())

8.以指定列宽格式化字符串:textwrap 模块来格式化字符串的输出

#textwrap 模块对于字符串打印是非常有用的,特别是当你希望输出自动匹配终端大小的时候。你可以使用 os.get terminal size() 方法来获取终端的大小尺寸

import textwrap
print(textwrap.fill(s, 70))
print(textwrap.fill(s, 40, initial_indent=' '))
print(textwrap.fill(s, 40, subsequent_indent=' '))

python字符串与文本操作(一)的更多相关文章

  1. python中的文本操作

    python如何进行文本操作 1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' ...

  2. Python字符串的相关操作

    1.大小写转换 判断字符串 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字 ...

  3. Python字符串的简单操作

    数据的操作 字符串的一些常用操作: 1 1 #!/usr/bin/env python 2 # #coding=utf-8 3 # 4 # test='hello world' 5 # print(t ...

  4. Python字符串的常用操作学习

    >>> name = "I love my job!" >>> name.capitalize() #首字母大写 'I love my job! ...

  5. python字符串和数值操作函数大全(非常全)

    字符串和数值型数字的操作大全 1.反斜杠\的使用规则:一般使用表示续行的操作,可以其他符号相结合组成其他的一些使用符号,转义字符\‘的使用会识别引号,使得字符串中的引号和外面本来的啊引号相区分. (1 ...

  6. python字符串的常见操作

    find: 根据指定字符串获取对应的下标, 如果找不到对应的数据返回-1, 这里的-1表示没有找到数据 my_str = "hello" # find: 根据指定字符串获取对应的下 ...

  7. 关于python字符串连接的操作

    python字符串连接的N种方式 注:本文转自http://www.cnblogs.com/dream397/p/3925436.html 这是一篇不错的文章 故转 python中有很多字符串连接方式 ...

  8. Python 字符串概念和操作

    # 字符串概念:由单个字符串组成的一个集合 # 普通字符串(非原始字符串) str = "abc" print(str) # abc # 原始字符串(前面加r) str = r&q ...

  9. 【代码学习】PYTHON字符串的常见操作

    一.字符串运算符 下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python": 操作符 描述 实例 + 字符串连接 >>>a ...

随机推荐

  1. 用vue实现一个简单的时间屏幕

    前言 去年用了一个小的 app,叫做 一个木函,本来想着用来做动画优化就删掉了的,不过看到他有个时间屏幕的小工具,就点进去看了下,觉得挺好玩的,就想着能不能自己实现一下. ps: 闲话不多说,先上例子 ...

  2. java启动RabbitMQ消息报异常解决办法

    启动SpringCloud微服务,RabbitMQ报如下异常: 2019-08-12 18:15:49.543 ERROR 53096 --- [68.252.131:5672] o.s.a.r.c. ...

  3. thinkphp5升级thinkphp6完整步骤

    在php.ini文件中  打开  php_openssl扩展,去掉前面的;extension=php_openssl.dll 在phpstudy的WWW目录打开cmd,输入composer creat ...

  4. UBoot配置编译及Makefile分析

    一. UBoot配置编译初步分析 1. UBoot源码结构 (1)UBoot工程项目中的文件可以分为3类 ① 第1类目录:与处理器体系结构或开发板硬件直接相关 ② 第2类目录:一些通用的函数或驱动程序 ...

  5. redis 数据删除策略和逐出算法

    数据存储和有效期 在 redis 工作流程中,过期的数据并不需要马上就要执行删除操作.因为这些删不删除只是一种状态表示,可以异步的去处理,在不忙的时候去把这些不紧急的删除操作做了,从而保证 redis ...

  6. String源码理解之indexOf函数

    1前言 不多说,直接上源码 2源码 我自己的理解,可能表述不清,多看几遍,不行就debug跟一遍代码自然就懂了. /** * Code shared by String and StringBuffe ...

  7. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

  8. [LOJ#500]「LibreOJ β Round」ZQC的拼图

    题目   点这里看题目. 分析   首先不难发现答案具有单调性,因此可以二分答案.答案上限为\(V=2m\times \max\{a_i, b_i\}\).   考虑如何去判断当前的答案.设这个答案为 ...

  9. Selenium和ChromeDriver的安装与配置

    安装安装selenium: win: pip install seleniumliunx: pip3 install selenium12安装ChromeDriver, 该工具供selenium使用C ...

  10. Dorado开发——树形下拉框

    最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...