Hoe kan ik de extensie van een bestand controleren?

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 meen tekenreeks is, kunt u endswithgebruiken:

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.pathbiedt veel functies voor het manipuleren van paden/bestandsnamen. (docs)

os.path.splitextneemt 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 pathlibvanaf 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.mp3is 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

Other episodes