2017-09-06 9 views
2

私はfind $DIR -iname '*.mp3'と同等のものを探していますが、kooky ['mp3', 'Mp3', MP3', etc]のことをしたくありません。しかし、簡単なendswith()アプローチで、re*.IGNORECASEのものを組み合わせる方法を理解できません。私の目標は1つのファイルを欠場させることではなく、これを最終的に他のメディア/ファイルタイプ/サフィックスに展開したいのです。Pythonで特定のサフィックスのファイルを大文字と小文字を区別しないで検索する方法を教えてください。

任意のフィードバックのための
import os 
import re 
suffix = ".mp3" 

mp3_count = 0 

for root, dirs, files in os.walk("/Volumes/audio"): 
    for file in files: 
     # if file.endswith(suffix): 
     if re.findall('mp3', suffix, flags=re.IGNORECASE): 
      mp3_count += 1 

print(mp3_count) 

TIA

+0

正規表現のソリューションでなければなりませんか?どうして 'pathlib.Path(file).suffix.lower()== '.mp3''? –

答えて

1

あなたはこれを試すことができます:)

import os 
# import re 
suffix = "mp3" 

mp3_count = 0 

for root, dirs, files in os.walk("/Volumes/audio"): 
    for file in files: 
     # if file.endswith(suffix): 
     if file.split('.')[-1].lower() == suffix: 
      mp3_count += 1 

print(mp3_count) 

Pythonのstring.split()が与えられているものをパラメータに応じて、リストに文字列を分離する、とあなたがアクセスすることができます接尾辞[-1]、リストの最後の要素

+0

ありがとうございます。シンプルで、実際に働くことができる唯一の提案でした。 – MagicToaster

1

os.walkで気にしないでください。代わりにthe easier, awesome pathlib.Pathの使用方法を学んでください。これと同じように:

from pathlib import Path 

suffix = ".mp3" 

mp3_count = 0 

p = Path('Volumes')/'audio': # note the easy path creation syntax 
# OR even: 
p = Path()/'Volumes'/'audio': 

for subp in p.rglob('*'): # recursively iterate all items matching the glob pattern 
    # .suffix property refers to .ext extension 
    ext = subp.suffix 
    # use the .lower() method to get lowercase version of extension 
    if ext.lower() == suffix: 
     mp3_count += 1 

print(mp3_count) 

「ワンライナー」、あなたがそういったことに興味があれば(明確にするため複数行):

sum([1 for subp in (Path('Volumes')/'audio').rglob('*') 
    if subp.suffix.lower() == suffix]) 
+0

'iterdir()'ではなく '.rglob()'を使うための@Rawingによる素晴らしい提案です。代わりにその答えを編集しました。 –

0

.endswithの正規表現と同等の$サインです。

上記の例を使用するには、これを行うことができます。

re.findall('mp3$', suffix, flags=re.IGNORECASE): 

これを行う方が正確かもしれませんが、ファイル名ではなく、そのようなtest.amp3としてファイルを拾うよりも.mp3で終わることを確認します

re.findall(r'\.mp3$', suffix, flags=re.IGNORECASE): 

これは本当に正規表現を必要としない状況のかなり良い例です。これらの例から学ぶことを歓迎しますが、他の回答者が提供する代替案を検討する価値があります。

関連する問題