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标准日志模块logging的使用方法
Nov 01 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
分析Python中解析构建数据知识
Jan 20 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
详解Python的循环结构知识点
May 20 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
如何使用Python自动控制windows桌面
Jul 11 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
使用Pytorch训练two-head网络的操作
May 28 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php猜单词游戏
2015/09/29 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
jQuery中width()方法用法实例
2014/12/24 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
浅谈编码,解码,乱码的问题
2016/12/30 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
python机器学习库xgboost的使用
2020/01/20 Python
django中的数据库迁移的实现
2020/03/16 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
python如何爬取网页中的文字
2020/07/28 Python
Python二元算术运算常用方法解析
2020/09/15 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
大学新生军训自我鉴定
2014/09/18 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
800字作文之大雪
2019/12/04 职场文书
带你了解CSS基础知识,样式
2021/07/21 HTML / CSS
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技