文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python split多个分隔符

2023-01-31 05:59

关注

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[i]
        sheet.write(i,0,buf[i].decode('utf8'))
    w.save(outefile)
       
wexcel('ex.txt','ex.xls')

打印结果(ex.txt写到ex.xls中):

wKioL1N-7Oeit1lJAABQlJY_AEc770.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%


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯