ฉันกำลังทำงานกับโปรแกรมบางอย่างที่ฉันต้องทำสิ่งต่าง ๆ ขึ้นอยู่กับนามสกุลของไฟล์ ฉันจะใช้มันได้ไหม
if m == *.mp3
...
elif m == *.flac
...
ฉันกำลังทำงานกับโปรแกรมบางอย่างที่ฉันต้องทำสิ่งต่าง ๆ ขึ้นอยู่กับนามสกุลของไฟล์ ฉันจะใช้มันได้ไหม
if m == *.mp3
...
elif m == *.flac
...
คำตอบ:
สมมติว่าm
เป็นสตริงคุณสามารถใช้endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
ในการคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? หรือมีประสิทธิภาพสูงมาก
os.path
มีฟังก์ชั่นมากมายสำหรับการจัดการพา ธ / ชื่อไฟล์ ( เอกสาร )
os.path.splitext
ใช้พา ธ และแยกนามสกุลไฟล์จากท้ายไฟล์
import os
filepaths = ["/folder/soundfile.mp3", "folder1/folder/soundfile.flac"]
for fp in filepaths:
# Split the extension from the path and normalise it to lowercase.
ext = os.path.splitext(fp)[-1].lower()
# Now we can simply use == to check for equality, no need for wildcards.
if ext == ".mp3":
print fp, "is an mp3!"
elif ext == ".flac":
print fp, "is a flac file!"
else:
print fp, "is an unknown file format."
ให้:
/folder/soundfile.mp3 เป็น mp3! folder1 / folder / soundfile.flac เป็นไฟล์ flac!
/.mp3
ไม่ถือว่าเป็นไฟล์ mp3 อย่างไรก็ตามนี่เป็นวิธีที่ควรปฏิบัติกับพื้นที่ชั้นนำ เช่น.gitignore
ไม่ใช่รูปแบบไฟล์
ใช้pathlib
จาก Python3.4 เป็นต้นไป
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
ดูโมดูล fnmatch นั่นจะทำสิ่งที่คุณพยายามจะทำ
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
วิธีง่ายๆวิธีหนึ่งอาจเป็น:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
จะคืนค่า tuple ด้วยสองค่า (ชื่อไฟล์ที่ไม่มีส่วนขยาย + เพียงส่วนขยาย) ดัชนีที่สอง ([1]) จะให้ส่วนขยายแก่คุณ สิ่งที่ยอดเยี่ยมคือวิธีนี้คุณสามารถเข้าถึงชื่อไฟล์ได้อย่างง่ายดายหากต้องการ!
หรือบางที:
from glob import glob
...
for files in glob('path/*.mp3'):
do something
for files in glob('path/*.flac'):
do something else
เธรดเก่า แต่อาจช่วยผู้อ่านในอนาคต ...
ฉันจะหลีกเลี่ยงการใช้. lower ()บนชื่อไฟล์หากไม่มีเหตุผลอื่นนอกจากจะทำให้โค้ดของคุณเป็นอิสระจากแพลตฟอร์มมากขึ้น (linux เป็นตัวพิมพ์เล็กและใหญ่ .lower ()ในชื่อไฟล์จะทำให้ตรรกะของคุณเสียหายในที่สุด ... หรือแย่กว่านั้นคือไฟล์สำคัญ!)
ทำไมไม่ใช้อีกครั้ง ? (แม้ว่าจะมีประสิทธิภาพมากกว่านี้คุณควรตรวจสอบส่วนหัวของไฟล์เวทย์มนตร์ของแต่ละไฟล์ ... วิธีตรวจสอบประเภทของไฟล์ที่ไม่มีนามสกุลในไพ ธ อน )
import re
def checkext(fname):
if re.search('\.mp3$',fname,flags=re.IGNORECASE):
return('mp3')
if re.search('\.flac$',fname,flags=re.IGNORECASE):
return('flac')
return('skip')
flist = ['myfile.mp3', 'myfile.MP3','myfile.mP3','myfile.mp4','myfile.flack','myfile.FLAC',
'myfile.Mov','myfile.fLaC']
for f in flist:
print "{} ==> {}".format(f,checkext(f))
เอาท์พุท:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
import os
source = ['test_sound.flac','ts.mp3']
for files in source:
fileName,fileExtension = os.path.splitext(files)
print fileExtension # Print File Extensions
print fileName # It print file name
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
.
ตัวอย่างเช่นsome.test.file.mp3
#!/usr/bin/python
import shutil, os
source = ['test_sound.flac','ts.mp3']
for files in source:
fileName,fileExtension = os.path.splitext(files)
if fileExtension==".flac" :
print 'This file is flac file %s' %files
elif fileExtension==".mp3":
print 'This file is mp3 file %s' %files
else:
print 'Format is not valid'
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('none of them')