หากฉันมีชื่อไฟล์อย่างใดอย่างหนึ่งต่อไปนี้:
1.1.1.1.1.jpg
1.1.jpg
1.jpg
ฉันจะรับเฉพาะชื่อไฟล์โดยไม่มีนามสกุลได้อย่างไร regex จะเหมาะสมหรือไม่?
หากฉันมีชื่อไฟล์อย่างใดอย่างหนึ่งต่อไปนี้:
1.1.1.1.1.jpg
1.1.jpg
1.jpg
ฉันจะรับเฉพาะชื่อไฟล์โดยไม่มีนามสกุลได้อย่างไร regex จะเหมาะสมหรือไม่?
คำตอบ:
ในกรณีส่วนใหญ่คุณไม่ควรใช้ regex สำหรับสิ่งนั้น
os.path.splitext(filename)[0]
นอกจากนี้ยังจะจัดการชื่อไฟล์.bashrc
อย่างถูกต้องโดยใช้ทั้งชื่อ
basename[:-len(".tar.gz")]
สำหรับสิ่งนี้
git-1.7.8.tar
ที่ชื่อฐาน ไม่มีวิธีที่จะคาดเดาได้อย่างถูกต้องว่าผู้โทรต้องการตัดจุดกี่จุดดังนั้นจึงsplitext()
ขีดเส้นสุดท้ายเท่านั้น หากคุณต้องการจัดการเคสแบบ edge .tar.gz
คุณจะต้องทำด้วยมือ git-1
เห็นได้ชัดว่าคุณไม่สามารถดึงจุดทั้งหมดเนื่องจากคุณจะจบลงด้วย
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
ถ้าฉันต้องทำสิ่งนี้ด้วย regex ฉันจะทำแบบนี้:
s = re.sub(r'\.jpg$', '', s)
คุณสามารถใช้เมธอดstemเพื่อรับชื่อไฟล์
นี่คือตัวอย่าง:
from pathlib import Path
p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
ไม่จำเป็นต้อง regex os.path.splitext
เป็นเพื่อนของคุณ:
os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')