博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python字符串与文本操作(一)
阅读量:5339 次
发布时间:2019-06-15

本文共 3555 字,大约阅读时间需要 11 分钟。

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

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

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

filename = 'spam.txt'print(filename.endswith('.txt')) #Trueprint(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 retext = 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,'<')#'<<<<<<<
或者ˆ 字符后面紧跟一个指定的宽度format(text, '>20')#' Hello World'

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

#format() 函数的一个好处是它不仅适用于字符串。它可以用来格式化任何值,使得它非常的通用。比如,你可以用它来格式化数字:x = 1.2345format(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 strings = string.Template('$name has $n messages.')s.substitute(vars())

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

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

 

转载于:https://www.cnblogs.com/master-song/p/8763619.html

你可能感兴趣的文章
shell cat 合并文件,合并数据库sql文件
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>