2010-12-14 39 views

Trả lời

172

Trong hầu hết các trường hợp, bạn không nên sử dụng regex cho điều đó.

os.path.splitext(filename)[0] 

Điều này cũng sẽ xử lý tên tệp như .bashrc chính xác bằng cách giữ nguyên tên.

+0

@nate c: Tôi sửa đổi câu trả lời của tôi trong khi bạn đang viết bình luận của bạn . –

+2

Không hoạt động đúng với "git-1.7.8.tar.gz", nơi nó chỉ xóa ".gz". Tôi sử dụng 'basename [: - len (". Tar.gz ")]' cho điều này. – blueyed

+25

@ blueyed: "Không hoạt động đúng" là vấn đề quan điểm. Tệp * là * một tệp gzip, tên cơ bản là 'git-1.7.8.tar'. Không có cách nào để đoán chính xác có bao nhiêu dấu chấm mà người gọi muốn bỏ đi, do đó, 'splitext()' chỉ là dải cuối cùng. Nếu bạn muốn xử lý các trường hợp cạnh như '.tar.gz', bạn sẽ phải thực hiện nó bằng tay. Rõ ràng, bạn không thể loại bỏ tất cả các dấu chấm, vì bạn sẽ kết thúc với 'git-1'. –

21
>>> import os 
>>> os.path.splitext("1.1.1.1.1.jpg") 
('1.1.1.1.1', '.jpg') 
5

Không cần regex. os.path.splitext là bạn của bạn:

os.path.splitext('1.1.1.jpg') 
>>> ('1.1.1', '.jpg') 
8

Nếu tôi phải làm điều này với một regex, tôi muốn làm điều đó như thế này:

s = re.sub(r'\.jpg$', '', s) 
Các vấn đề liên quan