파일의 확장자를 어떻게 확인할 수 있습니까?


178

파일 확장자에 따라 다른 작업을 수행 해야하는 특정 프로그램을 만들고 있습니다. 이걸 사용할 수 있을까요?

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

python re 모듈 (정규식)을 사용하여 일치
kefeizhou

21
@ kefeizhou : 아, 아뇨, 간단한 경기가 아닙니다.
orlp

답변:


383

m문자열 이라고 가정하면 다음을 사용할 수 있습니다 endswith.

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

대소 문자를 구분하지 않고 잠재적으로 큰 else-if 체인을 제거하려면 다음을 수행하십시오.

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

2
ext = m.rpartition ( '.') [-1]; ext == 가 훨씬 더 효율적 이라면
Volcano

1
@ WilhelmMurdoch 나는 당신의 의견을 거의 보지 못했습니다.
Flaudre 2016 년

@volcano는 왜 사용하지 .split('.')[-1]않습니까? 아니면 rpartition이 정말 높은 효율입니까?
스콧 앤더슨

55

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 파일입니다!

이 방법은 선행 기간을 무시하므로 /.mp3mp3 파일로 간주되지 않습니다. 그러나 이것은 선행 공간을 다루어야하는 방식입니다. 예 : .gitignore파일 형식이 아님
kon psych

24

pathlibPython3.4부터 사용하십시오 .

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

1
이것은 최선의 솔루션입니다

17

모듈 fnmatch를보십시오. 그것은 당신이하려는 일을 할 것입니다.

import fnmatch
import os

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

7

한 가지 쉬운 방법은 다음과 같습니다.

import os

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

os.path.splitext(file)두 값이있는 튜플을 반환합니다 (확장자가없는 파일 이름 + 확장자 만). 두 번째 인덱스 ([1])는 확장 기능 만 제공합니다. 멋진 점은 필요한 경우 파일 이름에 매우 쉽게 액세스 할 수 있다는 것입니다.


6

또는 아마도 :

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

4

오래된 글이지만 미래 독자들을 도울 수 있습니다 ...

나는 것이다 않도록 사용 ) (.lower 코드 더 플랫폼 독립을하는 것보다 다른 이유가있는 경우 파일 이름에. (리눅스 대소 문자를 구분 합니다. 파일 이름의 .lower () 는 결국 논리를 손상시킬 것입니다 ... 또는 더 중요한 것은 중요한 파일입니다!)

re를 사용하지 않습니까? (보다 강력하지만 각 파일의 매직 파일 헤더를 확인해야합니다 ... 파이썬에서 확장자가없는 파일 유형을 확인하는 방법은 무엇입니까? )

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

3
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

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

3
.예를 들어 여러 개의 파일이 포함 된 파일에는 작동하지 않습니다.some.test.file.mp3
Nick

3
[-1]을 수행하여 해당 사례를 포착 할 수 있습니다.
Christian Papathanasiou

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.