加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

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

发布时间:2016-12-04 09:26:11 所属栏目:Asp教程 来源:站长网
导读:一、如何拆分含有多种分隔符的字符串? 实际案例 我们要把某个字符串依据分隔符号拆分不同的字符段,该字符串包含多种不同的分隔符,例如: s = 'asd;aad|dasd|dasd,sdasd|asd,,Adas|sdasd;Asdasd,d|asd' 其中 lt;,gt;,lt;;gt;,lt;|gt;,lt;tgt; 都是分隔

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

实际案例

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

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

其中lt;,gt;,lt;;gt;,lt;|gt;,lt;tgt;都是分隔符,如何处理?

解决方案

连续使用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:UsersAdministratorgt;C:PythonPython27python.exe E:python-intensive-trainings2.py ['asd', 'aad', 'dasd', 'dasd', 'sdasd', 'asd', 'Adas', 'sdasd', 'Asdasd', 'd', 'asd']

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

gt;gt;gt; import re gt;gt;gt; 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()方法

gt;gt;gt; import os, stat gt;gt;gt; os.listdir('./') ['heap.java', 'quicksort.c', 'stack.cpp', 'install.sh', 'graph.py'] gt;gt;gt; [name for name in os.listdir('./') if name.endswith(('.sh','.py'))] ['install.sh', 'graph.py'] gt;gt;gt; 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 --gt; 09/15/2016,要如何处理?

解决方案

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

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

gt;gt;gt; log = '2016-09-15 18:27:26 statu unpacked python3-pip:all' gt;gt;gt; import re # 按顺序 gt;gt;gt; re.sub('(d{4})-(d{2})-(d{2})', r'2/3/1' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all' # 使用正则表达式的分组 gt;gt;gt; re.sub('(#63;Plt;yeargt;d{4})-(#63;Plt;monthgt;d{2})-(#63;Plt;daygt;d{2})', r'glt;monthgt;/glt;daygt;/glt;yeargt;' , log) '09/15/2016 18:27:26 statu unpacked python3-pip:all'

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

实际案例

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

hwDetect: "lt;0112gt;" gxDepthBits: "lt;32gt;" gxResolution: "lt;1024x768gt;" gxRefresh: "lt;60gt;" fullAlpha: "lt;1gt;" lodDist: "lt;100.0gt;" DistCull: "lt;500.0gt;"

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

["lt;0112gt;","lt;32gt;","lt;1024x768gt;","lt;60gt;","lt;1gt;","lt;100.0gt;","lt;500.0gt;"]

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

"lt;0112gt;lt;32gt;lt;1024x768gt;lt;60gt;lt;1gt;lt;100.0gt;lt;500.0gt;"

解决方案

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

gt;gt;gt; for n in ["lt;0112gt;","lt;32gt;","lt;1024x768gt;","lt;60gt;","lt;1gt;","lt;100.0gt;","lt;500.0gt;"]: ... result += n ... gt;gt;gt; result 'lt;0112gt;lt;32gt;lt;1024x768gt;lt;60gt;lt;1gt;lt;100.0gt;lt;500.0gt;'

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

gt;gt;gt; result = ''.join(["lt;0112gt;","lt;32gt;","lt;1024x768gt;","lt;60gt;","lt;1gt;","lt;100.0gt;","lt;500.0gt;"]) gt;gt;gt; result 'lt;0112gt;lt;32gt;lt;1024x768gt;lt;60gt;lt;1gt;lt;100.0gt;lt;500.0gt;'

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

gt;gt;gt; hello = [222,'sd',232,'2e',0.2] gt;gt;gt; ''.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()进行左右居中对齐

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

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读