设为首页 收藏本站
查看: 2130|回复: 0

[经验分享] python split多个分隔符

[复制链接]
发表于 2018-8-4 11:28:52 | 显示全部楼层 |阅读模式
  1.split不支持同时使用多种字符做分隔符,如果想实现这样的效果,可以用re,例如:
>>> s = 'Hello!This?Is!What?I!Want'  
>>> s
  
'Hello!This?Is!What?I!Want'
  
>>> re.split('[!?]',s)
  
['Hello', 'This', 'Is', 'What', 'I', 'Want']
  i = "25 192.168.19.32 192.168.1.30 [2014.09.28 09:01:35]env -i X='() { (a)=>\' bash -c 'echo date'; cat echo"
  >>> re.split(r'[ \[\]]',i)
  ['25', '192.168.19.32', '192.168.1.30', '', '2014.09.28', '09:01:35', 'env', '-i
  ', "X='()", '{', "(a)=>'", 'bash', '-c', "'echo", "date';", 'cat', 'echo']
  >>> re.findall(r'[\w.:]+',i)
  ['25', '192.168.19.32', '192.168.1.30', '2014.09.28', '09:01:35', 'env', 'i', 'X
  ', 'a', 'bash', 'c', 'echo', 'date', 'cat', 'echo']
  >>> re.findall(r'[^]^[\s]+',i)
  ['25', '192.168.19.32', '192.168.1.30', '2014.09.28', '09:01:35', 'env', '-i', "
  X='()", '{', "(a)=>'", 'bash', '-c', "'echo", "date';", 'cat', 'echo']
  2.例子
  test.txt:
  abcdstr1
  astr2m supernbajack
  jordon
#coding: utf-8  
import re
  

  
def split_on_separators(original, separators):
  
    # 这个是用正则实现的,可能不满足要求,不过非常简单
  
    # return filter(lambda x:x.strip(), re.split(r"[%s]" % separators, original))
  

  
    result = [original]
  
    for sep in separators:
  
        temp = []
  
        for r in result:
  
            temp.extend(filter(lambda x:x.strip(), r.split(sep)))
  
        result = temp
  
    return result
  

  
if __name__ == "__main__":
  
    line = open('test.txt','r').read()
  
    print split_on_separators(line, "\t\n")
  
    #print split_on_separators("a\tb\nc\tdstr1\nastr2 a\tlisa", "\t\n")
  打印结果:
  ['a', 'b', 'c', 'dstr1', 'astr2', 'm super', 'nba', 'jack', 'jordon']
  ————————————————————
for r in result:  
            temp.extend(filter(lambda x:x.strip(), r.split(sep)))
  对这句的理解:
>>> a = ' 123\ra\tabc'  
>>> a.strip()
  
'123\ra\tabc'
  
>>>filter(lambda x:x.strip(),' 123\ra\tabc')
  
'123aabc'
  

  

  
>>> filter(lambda x:x.strip(),'a\tb\nc\tdstr1\nastr2 a\tlisa')
  
'abcdstr1astr2alisa'
  
>>> b = filter(lambda x:x.strip(),'[a\tb\nc\tdstr1\nastr2 a\tlisa]')
  
>>> b
  
'[abcdstr1astr2alisa]'
  

  
>>> temp = []
  
>>> temp.extend(filter(lambda x:x.strip(),'a'.split('\n\t')))
  
>>> temp
  
['a']
  
>>> temp
  
['a']
  
>>> temp.extend(filter(lambda x:x.strip(),'str1'.split('\n\t')))
  
>>> temp
  
['a', 'str1']
  
>>> temp.extend(filter(lambda x:x.strip(),'str2'))
  
>>> temp
  
['a', 'str1', 's', 't', 'r', '2']
  

  

  
>>> temp = []
  
>>> temp.extend(filter(lambda x:x.strip(),' 123\ra\tabc'))
  
>>> temp
  
['1', '2', '3', 'a', 'a', 'b', 'c']
  
>>> temp.extend(filter(lambda x:x.strip(),' 123\ra\tabc'.split('\n\t')))
  
>>> temp
  
['1', '2', '3', 'a', 'a', 'b', 'c', ' 123\ra\tabc']
  ——————————————————————————————————
  上面例子的应用,将含有多列的普通文本写到excel中(本例split分隔符为空格和\n):
#coding: utf-8  
import re,xlrd,xlwt
  

  
def split_on_separators(original, separators):
  
    # 这个是用正则实现的,可能不满足要求,不过非常简单
  
    # return filter(lambda x:x.strip(), re.split(r"[%s]" % separators, original))
  

  
    result = [original]
  
    for sep in separators:
  
        temp = []
  
        for r in result:
  
            temp.extend(filter(lambda x:x.strip(), r.split(sep)))
  
        result = temp
  
    return result
  

  
line = open('ex.txt','r').read()
  
lisa = split_on_separators(line, " \n")
  

  

  
def wexcel(infile,outefile):
  
    buf = lisa
  
    print buf
  

  
    w=xlwt.Workbook()
  
    sheet=w.add_sheet('sheet1')
  
    for i in range(len(buf)):
  
        print buf
  
        sheet.write(i,0,buf.decode('utf8'))
  
    w.save(outefile)
  

  
wexcel('ex.txt','ex.xls')
  打印结果(ex.txt写到ex.xls中):
DSC0000.jpg

  ex.txt:
  /                   24%
  /backup             62%
  /project            20%
  memory           26.16%
  ————————————————后续———————————————
  test.txt:
  /                   24%
  /backup             62%
  /project            20%
  memory           26.16%
  line = file('D:/python27/test.txt','r').read()
  >>> line.split('\n')
  ['/                   24%', '/backup             62%', '/project            20%'
  , 'memory           26.16%']
  >>> line.split()
  ['/', '24%', '/backup', '62%', '/project', '20%', 'memory', '26.16%']
  >>> filter(lambda x:x.strip(),line.split())
  ['/', '24%', '/backup', '62%', '/project', '20%', 'memory', '26.16%']
  >>> for i in [line]:
  ...     print i.split('\n')
  ...
  ['/                   24%', '/backup             62%', '/project            20%'
  , 'memory           26.16%']
  >>> for i in [line]:
  ...     print filter(lambda x:x.strip(), i.split('\n'))
  ...
  ['/                   24%', '/backup             62%', '/project            20%'
  >>> filter(lambda x:x.strip(),line)
  '/24%/backup62%/project20%memory26.16%'
  >>> for i in line.split('\n'):
  ...     for sep in i.split(' '):
  ...             temp = []
  ...             temp.extend(filter(lambda x:x.strip(),i.split(' ')))
  ...     print temp
  ...
  ['/', '24%']
  ['/backup', '62%']
  ['/project', '20%']
  ['memory', '26.16%']
  >>> for i in line.split('\n'):
  ...     for sep in i.split(' '):
  ...             temp = []
  ...             temp.extend(filter(lambda x:x.strip(),sep.split(' ')))
  ...     print sep
  ...
  24%
  62%
  20%
  26.16%

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546423-1-1.html 上篇帖子: Python开发小知识集(一) 下篇帖子: Python实现跨平台运维小神器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表