Python的partition字串函數

來源:互聯網
上載者:User

轉載:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246121c35b8fd7c714c428896207a52ef0f07bbae616f615466e4c096c957d9bb92282b8d27203541c6171d9152e9911b79d620e118baef5fbcfcab6fcf&p=882a9643d58512a05beace375744cf20&newp=8564c237a4904eac5fbd9b7d0b158c3e5c5bc4387ebad1137c&user=baidu&fm=sc&query=python+partition&qid=ff4e5bcf244c9d94&p1=2

在2.5版中新增加了一個叫partition的函數,它可以做什麼呢?舉一個小例子:

>>> ‘http://www.donews.net/limodou’.partition(‘://’)
(‘http’, ‘://’, ‘www.donews.net/limodou’)
>>> ‘file:/a.html’.partition(‘://’)
(‘file:/a.html’, ”, ”)

從第一個例子可以看出,它用來根據指定的分隔字元將字串進行分割,如果字串包含指定的分隔字元,則返回一個3元的tuple,第一個為分隔字元左邊的子串,第二個為分隔字元本身,第三個為分隔字元右邊的子串。第二個例子說明,如果找不到指定的分隔字元,則返回仍然是一個3元的tuple,第一個為整個字串,第二和第三個為空白串。

那麼有人要問,它與split(sep, 1)有什麼區別呢?首先split返回的可能不是固定長度的傳回值,它返回的是一個list,如果找到,則返回一個2元list,如果沒找到,則返回一個1元的list,如:

>>> ‘a.b.c’.split(‘,’, 1)
['a.b.c']
>>> ‘a.b.c’.split(‘.’, 1)
['a', 'b.c']

同時在找到的情況下,它並不返回分隔字元。

在某些情況下partition(sep)和rpartition(sep)(從右向左匹配)與split(sep, 1)和rsplit(sep, 1)的功能是類似的。不過partition其實是為了替換find,index而產生的,並不是為了替換split而產生的。在許多情況下,我們需要先通過find來找到一個位置,再進行分割。而使用partition就方便得多。如:

>>> a = ‘http://www.donews.net’
>>> pos = a.find(‘://’)
>>> if pos > -1:
…     print a[:pos], a[pos+1:]
http www.donews.net

而使用partition:

>>> a = ‘http://www.donews.net’
>>> left, sep, right = a.partition(‘://’)
>>> print left, right
http www.donews.net

是不是簡單一些呢。

同時在2.5版中,startswith和endswith有變化,它的第一個參數可以是一個tuple了。這樣用在判斷幾種情況的時候非常方便。比如要判斷檔案名稱尾碼,原來只支援一個值時,可能要先拆分,再判斷,用不上endswith,如:

>>> a = ‘a.gif’
>>> import os.path
>>> ext = os.path.splitext(a)[1]
>>> if ext in ['.gif', '.png', '.bmp']:
…     print ‘found’

found

而現在可以:

>>> a = ‘a.gif’
>>> if a.endswith((‘.gif’, ‘png’, ‘.bmp’)):
…     print ‘found’

found

是不是簡單多了。注意,上面的tuple我換成list就是不行,看來是強制的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.