Nhận tên tệp mà không có phần mở rộng bằng Python


Câu trả lời:


203

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

os.path.splitext(filename)[0]

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


4
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

28
@blueyed: "Không hoạt động bình thường" là một vấn đề của quan điểm. Tệp tệp gzip, tên cơ sở là ai git-1.7.8.tar. Không có cách nào để đoán chính xác số lượng dấu chấm mà người gọi muốn xóa, vì vậy splitext()chỉ xóa dấu cuối cùng. Nếu bạn muốn xử lý các trường hợp cạnh như vậy .tar.gz, bạn sẽ phải làm điều đó 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.
Marcelo Cantos


10

Nếu tôi phải làm điều này với regex, tôi sẽ làm như thế này:

s = re.sub(r'\.jpg$', '', s)

6

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

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

5

Bạn có thể sử dụng phương pháp gốc để lấy tên tệp.

Đây là một ví dụ:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.