Как я могу проверить расширение файла?

Я работаю над определенной программой, где мне нужно делать разные вещи в зависимости от расширения файла. Могу ли я просто использовать это?

if m == *.mp3
   ...
elif m == *.flac
   ...

Ответ 1

Предполагая, что m является строкой, вы можете использовать endswith:

if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...

Чтобы не учитывать регистр и исключить потенциально большую цепочку else-if:

m.lower().endswith(('.png', '.jpg', '.jpeg'))

Ответ 2

os.path предоставляет множество функций для управления путями/именами файлов. (docs)

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 is an mp3!
folder1/folder/soundfile.flac is a flac file!

Ответ 3

Посмотрите модуль fnmatch. Это сделает то, что вы пытаетесь сделать.

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print file

Ответ 4

или, возможно:

from glob import glob
...
for files in glob('path/*.mp3'): 
  do something
for files in glob('path/*.flac'): 
  do something else

Ответ 5

одним простым способом может быть:

import os

if os.path.splitext(file)[1] == ".mp3":
    # do something

os.path.splitext(file) вернет кортеж с двумя значениями (имя файла без расширения + только расширение). Второй индекс ([1]) для этого даст вам просто расширение. Самое приятное, что таким образом вы также можете легко получить доступ к имени файла, если это необходимо!

Ответ 6

Используйте pathlib Начиная с Python3.4.

from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'

Ответ 7

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

Ответ 8

if (file.split(".")[1] == "mp3"):
    print "its mp3"
elif (file.split(".")[1] == "flac"):
    print "its flac"
else:
    print "not compat"

Ответ 9

Старый поток, но может помочь будущим читателям...

Я бы избегал, используя .lower() в именах файлов, если только для того, чтобы сделать ваш код более независимым от платформы. (linux есть с сенсорным, .lower() в имени файла наверняка испортит вашу логику в конце концов... или, что еще хуже, важный файл!)

Почему бы не использовать re? (Хотя, чтобы быть еще более надежным, вы должны проверить заголовок магического файла для каждого файла... Как проверить тип файлов без расширений в 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)) 

Вывод:

myfile.mp3 ==> mp3
myfile.MP3 ==> mp3
myfile.mP3 ==> mp3
myfile.mp4 ==> skip
myfile.flack ==> skip
myfile.FLAC ==> flac
myfile.Mov ==> skip
myfile.fLaC ==> flac

Ответ 10

#!/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'

Ответ 11

import pandas as pd
file='test.xlsx'
if file.endswith('.csv'):
    print('file is CSV')
elif file.endswith('.xlsx'):
    print('file is excel')
else:
    print('non of them')