รับชื่อไฟล์ที่ไม่มีนามสกุลใน Python


91

หากฉันมีชื่อไฟล์อย่างใดอย่างหนึ่งต่อไปนี้:

1.1.1.1.1.jpg

1.1.jpg

1.jpg

ฉันจะรับเฉพาะชื่อไฟล์โดยไม่มีนามสกุลได้อย่างไร regex จะเหมาะสมหรือไม่?


คำตอบ:


205

ในกรณีส่วนใหญ่คุณไม่ควรใช้ regex สำหรับสิ่งนั้น

os.path.splitext(filename)[0]

นอกจากนี้ยังจะจัดการชื่อไฟล์.bashrcอย่างถูกต้องโดยใช้ทั้งชื่อ


4
ทำงานไม่ถูกต้องกับ "git-1.7.8.tar.gz" ซึ่งจะลบเฉพาะ ".gz" เท่านั้น ฉันใช้basename[:-len(".tar.gz")]สำหรับสิ่งนี้
blueyed

28
@blueyed: "ทำงานไม่ถูกต้อง" เป็นเรื่องของมุมมอง ไฟล์ที่เป็นไฟล์ gzip git-1.7.8.tarที่ชื่อฐาน ไม่มีวิธีที่จะคาดเดาได้อย่างถูกต้องว่าผู้โทรต้องการตัดจุดกี่จุดดังนั้นจึงsplitext()ขีดเส้นสุดท้ายเท่านั้น หากคุณต้องการจัดการเคสแบบ edge .tar.gzคุณจะต้องทำด้วยมือ git-1เห็นได้ชัดว่าคุณไม่สามารถดึงจุดทั้งหมดเนื่องจากคุณจะจบลงด้วย
Marcelo Cantos



8

คุณสามารถใช้เมธอดstemเพื่อรับชื่อไฟล์

นี่คือตัวอย่าง:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.