Python中字符串的处理技巧分享


Posted in Python onSeptember 17, 2016

一、如何拆分含有多种分隔符的字符串?

实际案例

我们要把某个字符串依据分隔符号拆分不同的字符段,该字符串包含多种不同的分隔符,例如:

s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd'

其中<,>,<;>,<|>,<\t>都是分隔符,如何处理?

解决方案

连续使用split()方法,每次处理一种分隔符

# 使用Python2 def mySplit(s,ds): res = [s] for d in ds: t = [] map(lambda x: t.extend(x.split(d)), res) res = t return [x for x in res if x] s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd' result = mySplit(s, ';,|\t') print(result)
C:\Users\Administrator>C:\Python\Python27\python.exe E:\python-intensive-training\s2.py ['asd', 'aad', 'dasd', 'dasd', 'sdasd', 'asd', 'Adas', 'sdasd', 'Asdasd', 'd', 'asd']

使用正则表达式的re.split()方法,一次性拆分字符串

>>> import re >>> re.split('[,;\t|]+','asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd') ['asd', 'aad', 'dasd', 'dasd', 'sdasd', 'asd', 'Adas', 'sdasd', 'Asdasd', 'd', 'asd']

二、如何判断字符串a是否以字符串b开头或结尾?

实际案例

如某目录有如下文件:

quicksort.c graph.py heap.java install.sh stack.cpp ......

现在需要给.sh.py结尾的文件夹上可执行权限

解决方案

使用字符串的startswith()endswith()方法

>>> import os, stat >>> os.listdir('./') ['heap.java', 'quicksort.c', 'stack.cpp', 'install.sh', 'graph.py'] >>> [name for name in os.listdir('./') if name.endswith(('.sh','.py'))] ['install.sh', 'graph.py'] >>> os.chmod('install.sh', os.stat('install.sh').st_mode | stat.S_IXUSR)
[root@iZ28i253je0Z t]# ls -l install.sh -rwxr--r-- 1 root root 0 Sep 15 18:13 install.sh

三、如何调整字符串中文本的格式?

实际案例

某软件的日志文件,其中日期格式为yyy-mm-dd:

2016-09-15 18:27:26 statu unpacked python3-pip:all 2016-09-15 19:27:26 statu half-configured python3-pip:all 2016-09-15 20:27:26 statu installd python3-pip:all 2016-09-15 21:27:26 configure asdasdasdas:all python3-pip:all

需要把其中日期改为美国日期的格式mm/dd/yyy, 2016-09-15 --> 09/15/2016,要如何处理?

解决方案

使用正则表达式re.sub()方法做字符串替换

利用正则表达式的捕获组,捕获每个部分内容,在替换字符串中各个捕获组的顺序。

>>> log = '2016-09-15 18:27:26 statu unpacked python3-pip:all' >>> import re # 按顺序 >>> re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all' # 使用正则表达式的分组 >>> re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', r'\g<month>/\g<day>/\g<year>' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all'

四、如何将多个小字符串拼接成一个大的字符串?

实际案例

在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:

hwDetect: "<0112>" gxDepthBits: "<32>" gxResolution: "<1024x768>" gxRefresh: "<60>" fullAlpha: "<1>" lodDist: "<100.0>" DistCull: "<500.0>"

在程序中我们将各个参数按次序收集到列表中:

["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]

最终我们要把各个参数拼接成一个数据包进行发送:

"<0112><32><1024x768><60><1><100.0><500.0>"

解决方案

迭代列表,连续使用'+'操作依次拼接每一个字符串

>>> for n in ["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]: ... result += n ... >>> result '<0112><32><1024x768><60><1><100.0><500.0>'

使用str.join()方法,更加快速的拼接列表中所有字符串

>>> result = ''.join(["<0112>","<32>","<1024x768>","<60>","<1>","<100.0>","<500.0>"]) >>> result '<0112><32><1024x768><60><1><100.0><500.0>'

如果列表中有数字,可以使用生成器进行转换:

>>> hello = [222,'sd',232,'2e',0.2] >>> ''.join(str(x) for x in hello) '222sd2322e0.2'

五、如何对字符串进行左, 右, 居中对齐?

实际案例

某个字典中存储了一系列属性值:

{ 'ip':'127.0.0.1', 'blog': 'www.anshengme.com', 'title': 'Hello world', 'port': '80' }

在程序中,我们想以以下格式将其内容输出,如何处理?

ip : 127.0.0.1 blog : www.anshengme.com title : Hello world port : 80

解决方案

使用字符串的str.ljust() , str.rjust,str.cente()进行左右居中对齐

>>> info = {'ip':'127.0.0.1','blog': 'www.anshengme.com','title': 'Hello world','port': '80'} # 获取字典中的keys最大长度 >>> max(map(len, info.keys())) 5 >>> w = max(map(len, info.keys())) >>> for k in info: ... print(k.ljust(w), ':',info[k]) ... # 获取到的结果 port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world

使用format()方法,传递类似'<20','>20','^20'参数完成同样任务

>>> for k in info: ... print(format(k,'^'+str(w)), ':',info[k]) ... port : 80 blog : www.anshengme.com ip : 127.0.0.1 title : Hello world

六、如何去掉字符串中不需要的字符?

实际案例

过滤掉用户输入卡后多余的空白字符: anshengm.com@gmail.com

过滤某windows下编辑文本中的'\r': hello word\r\n

去掉文本中的unicode组合符号(音调): ‘ní hǎo, chī fàn'

解决方案

字符串strip() , lstrip(),rstrip()方法去掉字符串两端字符

>>> email = ' anshengm.com@gmail.com ' >>> email.strip() 'anshengm.com@gmail.com' >>> email.lstrip() 'anshengm.com@gmail.com ' >>> email.rstrip() ' anshengm.com@gmail.com' >>>

删除某个固定位置的字符,可以使用切片+拼接的方法

>>> s[:3] + s[4:] 'abc123'

字符串的replace()方法或正则表达式re.sub()删除任意位置字符

>>> s = '\tabc\t123\txyz' >>> s.replace('\t', '') 'abc123xyz'

使用re.sub()删除多个

>>> import re >>> re.sub('[\t\r]','', string) 'abc123xyzopq'

字符串translate()方法,可以同时删除多种不同字符

>>> import string >>> s = 'abc123xyz' >>> s.translate(string.maketrans('abcxyz','xyzabc')) 'xyz123abc'
>>> s = '\rasd\t23\bAds' >>> s.translate(None, '\r\t\b') 'asd23Ads'
# python2.7 >>> i = u'ní hǎo, chī fàn' >>> i u'ni\u0301 ha\u030co, chi\u0304 fa\u0300n' >>> i.translate(dict.fromkeys([0x0301, 0x030c, 0x0304, 0x0300])) u'ni hao, chi fan'

总结

以上就是为大家整理的Python中字符串的处理技巧,文中通过案例、解决方案以及实例来演示如何解决,对大家学习或者使用python具有一定的参考借鉴价值。有需要的可以参考借鉴。

Python 相关文章推荐
python 实现插入排序算法
Jun 05 Python
zbar解码二维码和条形码示例
Feb 07 Python
举例详解Python中的split()函数的使用方法
Apr 07 Python
Python3实现从指定路径查找文件的方法
May 22 Python
Django发送html邮件的方法
May 26 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
获取Django项目的全部url方法详解
Oct 26 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
python实现翻译word表格小程序
Feb 27 Python
教你怎么用Python生成九宫格照片
May 20 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 #Python
发布你的Python模块详解
Sep 15 #Python
Python selenium 三种等待方式解读
Sep 15 #Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 #Python
Python selenium文件上传方法汇总
Nov 19 #Python
Python selenium如何设置等待时间
Sep 15 #Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 #Python
You might like
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php绘制圆形的方法
2015/01/24 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
wxPython事件驱动实例详解
2014/09/28 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
旅游活动总结
2014/08/27 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
Python基本数据类型之字符串str
2021/07/21 Python
欧元符号 €
2022/02/17 杂记
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python