ファイルの拡張子を確認するにはどうすればよいですか?


178

私はファイルの拡張子に応じて異なることをする必要がある特定のプログラムに取り組んでいます。これだけでいいですか?

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

マッチングにpython re module(regex)を使用
kefeizhou

21
@kefeizhou:ああ、違います。単純なマッチではありません。
orlp 2011

回答:


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 ==の方がはるかに効率的である場合
火山

1
@WilhelmMurdoch私はほとんどあなたのコメントを見ませんでした、私はそうしました。
Flaudre 2015年

@volcano使ってみません.split('.')[-1]か?それとも、パーティションは本当に高い効率ですか?
スコットアンダーソン

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ファイルです!

このメソッドは先行期間を無視するため/.mp3、mp3ファイルとは見なされません。ただし、これは先行スペースの扱い方です。例えば.gitignore、ファイル形式ではありません
kon

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

1つの簡単な方法は次のとおりです。

import os

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

os.path.splitext(file)2つの値を持つタプルを返します(拡張子なしのファイル名+拡張子のみ)。そのため、2番目のインデックス([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あなたのコードより多くのプラットフォームから独立を作成するよりも、他の理由であれば、ファイル名に。(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

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


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.