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