split函数python 未定义_Python字符串方法split()中的一道坑

初看这个方法还挺好用的,用来切割字符串真是的是非常方便,返回的字符串数组也非常容易处理。

于是乎看了一眼就应用到我的程序当中去了。

用来切割如下形式的字符串

s = 'Jul 24 21:38:25 luozw medusa.py[24707]: HOST=192.168.50.77 LOGIN=root PASSWORD=123456 SERVICE=ssh PORT=22'

month = s.split(' ')[0] #取月份

day = s.split(' ')[1] #取天数

……

成功的运行了。

后来设置到crontab中自动运行,也能成功运行,可是到了8月份的时候结果就不正常了。

自己跑到八月份的日志文件里看

Aug 1 21:38:25 luozw medusa.py[24707]: HOST=192.168.50.77 LOGIN=root PASSWORD=123456 SERVICE=ssh PORT=22

日志格式看起来也没问题,然后不得已去调试源程序,发现切割的字符串乱七八糟的。

将s.split(' ')直接打印出来看,马上就明白了:

['Aug', '', '2', '21:38:25', 'luozw', 'medusa.py[24707]:', 'HOST=192.168.50.77', 'LOGIN=root', 'PASSWORD=123456', 'SERVICE=ssh', 'PORT=22']

数组第二个元素是一个空字符串,它代表了一个空格,原来spilt方法是严格按照过滤参数设置的,不会感知连续过滤的参数。

Jul 24之间相距一个空格,但是Aug 1之间就相距两个空格,所以切割失败,导致后来取得数据发生错误。

此时有两个解决办法:

1.采用不带参数的split(),它会把所有空格(空格符、制表符、换行符)当作分隔符。

2.filter(None, s.split(' '))

第二种方法应用场景更多一些。

看看这个例子

a = 'hello++world!+'

如何取得'hello'和'world'呢?

>>>a.split('+')

['hello', '', 'world!', ''] #含有两个空字符串

>>>filter(None, a.split('+'))

['hello', 'world!']

关于filter()方法的使用说明:

filter(...)

filter(function or None, sequence) -> list, tuple, or string

Return those items of sequence for which function(item) is true. If

function is None, return the items that are true. If sequence is a tuple

or string, return the same type, else return a list.

总结的经验:对函数方法的使用不要过于想当然了,文档简易可得的话最好把函数说明看完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值