Python中字符串的处理技巧分享
一、如何拆分含有多种分隔符的字符串? 实际案例 我们要把某个字符串依据分隔符号拆分不同的字符段,该字符串包含多种不同的分隔符,例如: s = 'asd;aad|dasd|dasd,sdasd|asd,Adas|sdasd;Asdasd,d|asd' 其中 解决方案 连续使用 # 使用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,d|asd' result = mySplit(s,';,|t') print(result) C:UsersAdministrator>C:PythonPython27python.exe E:python-intensive-trainings2.py ['asd','aad','dasd','sdasd','asd','Adas','Asdasd','d','asd'] 使用正则表达式的 >>> import re >>> re.split('[,;t|]+','asd;aad|dasd|dasd,d|asd') ['asd','asd'] 二、如何判断字符串a是否以字符串b开头或结尾? 实际案例 如某目录有如下文件: quicksort.c graph.py heap.java install.sh stack.cpp ...... 现在需要给 解决方案 使用字符串的 >>> 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 三、如何调整字符串中文本的格式? 实际案例 某软件的日志文件,其中日期格式为 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 需要把其中日期改为美国日期的格式 解决方案 使用正则表达式 利用正则表达式的捕获组,捕获每个部分内容,在替换字符串中各个捕获组的顺序。 >>> 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>","<500.0>"]: ... result += n ... >>> result '<0112><32><1024x768><60><1><100.0><500.0>' 使用 >>> result = ''.join(["<0112>","<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 解决方案 使用字符串的 >>> info = {'ip':'127.0.0.1','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 使用 >>> 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 wordrn 去掉文本中的unicode组合符号(音调): ‘ní hǎo,chī fàn' 解决方案 字符串 >>> 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' 字符串的 >>> s = 'tabct123txyz' >>> s.replace('t','') 'abc123xyz' 使用 >>> import re >>> re.sub('[tr]','',string) 'abc123xyzopq' 字符串 >>> import string >>> s = 'abc123xyz' >>> s.translate(string.maketrans('abcxyz','xyzabc')) 'xyz123abc' >>> s = 'rasdt23bAds' >>> s.translate(None,'rtb') 'asd23Ads' # python2.7 >>> i = u'ní hǎo,chī fàn' >>> i u'niu0301 hau030co,chiu0304 fau0300n' >>> i.translate(dict.fromkeys([0x0301,0x030c,0x0304,0x0300])) u'ni hao,chi fan' 总结 以上就是为大家整理的Python中字符串的处理技巧,文中通过案例、解决方案以及实例来演示如何解决,对大家学习或者使用python具有一定的参考借鉴价值。有需要的可以参考借鉴。 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python字符串操作技巧汇总》、《Python编码操作技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |