split函数python 未定义_Python字符串方法split()中的一道坑
初看這個(gè)方法還挺好用的,用來(lái)切割字符串真是的是非常方便,返回的字符串?dāng)?shù)組也非常容易處理。
于是乎看了一眼就應(yīng)用到我的程序當(dāng)中去了。
用來(lái)切割如下形式的字符串
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] #取天數(shù)
……
成功的運(yùn)行了。
后來(lái)設(shè)置到crontab中自動(dòng)運(yùn)行,也能成功運(yùn)行,可是到了8月份的時(shí)候結(jié)果就不正常了。
自己跑到八月份的日志文件里看
Aug 1 21:38:25 luozw medusa.py[24707]: HOST=192.168.50.77 LOGIN=root PASSWORD=123456 SERVICE=ssh PORT=22
日志格式看起來(lái)也沒(méi)問(wèn)題,然后不得已去調(diào)試源程序,發(fā)現(xiàn)切割的字符串亂七八糟的。
將s.split(' ')直接打印出來(lái)看,馬上就明白了:
['Aug', '', '2', '21:38:25', 'luozw', 'medusa.py[24707]:', 'HOST=192.168.50.77', 'LOGIN=root', 'PASSWORD=123456', 'SERVICE=ssh', 'PORT=22']
數(shù)組第二個(gè)元素是一個(gè)空字符串,它代表了一個(gè)空格,原來(lái)spilt方法是嚴(yán)格按照過(guò)濾參數(shù)設(shè)置的,不會(huì)感知連續(xù)過(guò)濾的參數(shù)。
Jul 24之間相距一個(gè)空格,但是Aug 1之間就相距兩個(gè)空格,所以切割失敗,導(dǎo)致后來(lái)取得數(shù)據(jù)發(fā)生錯(cuò)誤。
此時(shí)有兩個(gè)解決辦法:
1.采用不帶參數(shù)的split(),它會(huì)把所有空格(空格符、制表符、換行符)當(dāng)作分隔符。
2.filter(None, s.split(' '))
第二種方法應(yīng)用場(chǎng)景更多一些。
看看這個(gè)例子
a = 'hello++world!+'
如何取得'hello'和'world'呢?
>>>a.split('+')
['hello', '', 'world!', ''] #含有兩個(gè)空字符串
>>>filter(None, a.split('+'))
['hello', 'world!']
關(guān)于filter()方法的使用說(shuō)明:
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.
總結(jié)的經(jīng)驗(yàn):對(duì)函數(shù)方法的使用不要過(guò)于想當(dāng)然了,文檔簡(jiǎn)易可得的話(huà)最好把函數(shù)說(shuō)明看完。
總結(jié)
以上是生活随笔為你收集整理的split函数python 未定义_Python字符串方法split()中的一道坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python语言format用法_pyt
- 下一篇: java swing点击按钮后输出结果展