Skip to main content

[Python] Cắt chuỗi trong Python

Nghe có vẻ đơn giản nhưng rất dễ mắc lỗi mà khó phát hiện ra.

NOTE: In [n]: là ký hiệu bắt đầu mỗi câu lệnh trong Ipython shell
Out[n]: là ký hiệu đầu ra, kết quả của câu lệnh vừa chạy.

Cho chuỗi sau:
In [4]: s = '....slsslslsls...sls'
Yêu cầu cắt bỏ đoạn '.sls' ở đuôi.
Ta rất dễ dùng lệnh strip hay thậm chí cẩn thận hơn là rstrip để làm việc này, thế nhưng...

In [5]: s.rstrip('.sls')
Out[5]: ''

In [6]: s2 = '....slsasls.sls'

In [7]: s2.rstrip('.sls')
Out[7]: '....slsa'
Như bạn thấy, lệnh rstrip sẽ xóa liên tực các ký tự '.' 's' 'l' từ phải sang, và đó là điều ta không mong đợi.


s.replace('.sls', ‘’) cũng không phải giải pháp hay vì nó sẽ replace hết.

Sau đây là vài cách để làm được điều này:


In [11]: '.sls'.join(s.split('.sls')[:-1])                                                                                                           
Out[11]: '....slsslslsls..'

In [12]: s[:s.rfind('.sls')] # best way for me
Out[12]: '....slsslslsls..'
Hoặc có thể dùng 1 hàm có sẵn ở os.path

In [2]: import os

In [5]: s = 'slslsl...sls.sls'

In [6]: os.path.splitext(s)
Out[6]: ('slslsl...sls', '.sls')
Hoặc có thể dùng regex.

Kết luận ngắn:
  • Cách chính xác để cắt string trong python là slice (vì string trong python là iterable)
  • Khi bạn định làm gì đó liên quan đến file, filename, path ..., hãy tìm trong os.path hay các thư viện builtin giúp thực hiện việc đó trước. os.path.join(a, b) sẽ giúp join 2 phần của 1 path một cách chính xác, đơn giản nhất. :3

Nếu có cách nào hay hơn, bạn hãy suggest ở phần comment nhóe :3

Comments

  1. Sao ko dùng s[:-4]

    ReplyDelete
    Replies
    1. cũng được nhưng phải đếm , cái rfind tự tìm

      Delete
    2. thì s[:-len('.sls')] cho đỡ phải đếm =))

      Delete
    3. nói thật mới học nên không thích nhớ function một tẹo nào, toàn dùng cái cơ bản find, replace ... và slices nhưng code sẽ dài hơn trong một số trường hợp :v

      Delete

Post a Comment

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG