Ik werk aan een bepaald programma waarbij ik verschillende dingen moet doen, afhankelijk van de extensie van het bestand. Kan ik dit gewoon gebruiken?
if m == *.mp3
...
elif m == *.flac
...
Antwoord 1, autoriteit 100%
Ervan uitgaande dat m
een tekenreeks is, kunt u endswith
gebruiken:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Om niet hoofdlettergevoelig te zijn en een mogelijk grote else-if-keten te elimineren:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
Antwoord 2, autoriteit 13%
os.path
biedt veel functies voor het manipuleren van paden/bestandsnamen. (docs)
os.path.splitext
neemt een pad en splitst de bestandsextensie vanaf het einde ervan.
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."
Geeft:
/folder/soundfile.mp3 is een mp3! folder1/folder/soundfile.flac is een flac-bestand!
Antwoord 3, autoriteit 10%
Gebruik pathlib
vanaf Python3.4 en verder.
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
Antwoord 4, autoriteit 4%
Kijk naar module fnmatch. Dat zal doen wat je probeert te doen.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
Antwoord 5, autoriteit 2%
of misschien:
from glob import glob
...
for files in glob('path/*.mp3'):
do something
for files in glob('path/*.flac'):
do something else
Antwoord 6, autoriteit 2%
een gemakkelijke manier zou kunnen zijn:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
retourneert een tuple met twee waarden (de bestandsnaam zonder extensie + alleen de extensie). De tweede index ([1]) geeft je daarom alleen de extensie. Het leuke is dat je op deze manier ook vrij gemakkelijk toegang hebt tot de bestandsnaam, indien nodig!
Antwoord 7
Een oude thread, maar kan toekomstige lezers helpen…
Ik zou vermijdenhet gebruik van .lower()voor bestandsnamen, alleen al om je code platformonafhankelijk te maken. (linux ishoofdlettergevoelig, .lower()op een bestandsnaam zal uiteindelijk je logica zeker beschadigen … of erger nog, een belangrijk bestand!)
Waarom zou u reniet gebruiken? (Hoewel om nog robuuster te zijn, moet je de magische bestandskop van elk bestand controleren…
Hoe te controleren van het type bestanden zonder extensies in Python? )
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))
Uitgang:
myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac
Antwoord 8
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
Antwoord 9
#!/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'
Antwoord 10
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
Antwoord 11
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('none of them')
Antwoord 12
Enkele van de bovenstaande antwoorden zijn niet goed voor mapnamen met perioden. (folder.mp3
is een geldige mapnaam). U moet ervoor zorgen dat het “bestand” niet echt een map is voordat u de extensie controleert.
Controle van de uitbreiding van een bestand:
import os
file_path = "C:/folder/file.mp3"
if os.path.isfile(file_path):
file_extension = os.path.splitext(file_path)[1]
if file_extension.lower() == ".mp3":
print("It's an mp3")
if file_extension.lower() == ".flac":
print("It's a flac")
Uitgang:
It's an mp3
Controle van de uitbreiding van alle bestanden in een map:
import os
directory = "C:/folder"
for file in os.listdir(directory):
file_path = os.path.join(directory, file)
if os.path.isfile(file_path):
file_extension = os.path.splitext(file_path)[1]
print(file, "ends in", file_extension)
Uitgang:
abc.txt ends in .txt
file.mp3 ends in .mp3
song.flac ends in .flac
File-uitbreiding vergelijken tegen meerdere typen:
import os
file_path = "C:/folder/file.mp3"
if os.path.isfile(file_path):
file_extension = os.path.splitext(file_path)[1]
if file_extension.lower() in {'.mp3', '.flac', '.ogg'}:
print("It's a music file")
elif file_extension.lower() in {'.jpg', '.jpeg', '.png'}:
print("It's an image file")
Uitvoer:
It's a music file