আমি কীভাবে কোনও ফাইলের সম্প্রসারণ পরীক্ষা করতে পারি?


178

আমি একটি নির্দিষ্ট প্রোগ্রামে কাজ করছি যেখানে আমার ফাইলের প্রসারের উপর নির্ভর করে বিভিন্ন জিনিস করা দরকার। আমি কি এটি ব্যবহার করতে পারি?

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


21
@ কেফিজহৌ: ওহ godশ্বর না, সাধারণ ম্যাচের জন্য নয়।
orlp

উত্তর:


383

ধরে mনেওয়া একটি স্ট্রিং, আপনি এটি ব্যবহার করতে পারেন endswith:

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

কেস-সংবেদনশীল হতে এবং সম্ভাব্য বৃহত্তর অন্য যদি-তবে শৃঙ্খলা দূর করতে:

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

2
ext = m.rpartition ('।') [- 1]; যদি ext == আরও কার্যকর হবে
আগ্নেয়গিরি

1
@ উইলহেলম মুরডোচ আপনার মন্তব্য প্রায় দেখেনি, খুশি হয়েছি।
ফ্ল্যাড্রে

@ ভোলকানো কেন ব্যবহার .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 একটি এমপি 3!
ফোল্ডার 1 / ফোল্ডার / সাউন্ডফিল.ফ্ল্যাক একটি ফ্ল্যাক ফাইল!

এই পদ্ধতিটি অগ্রণী পিরিয়ড উপেক্ষা করে তাই /.mp3কোনও এমপি 3 ফাইল হিসাবে বিবেচিত হয় না। কোনও অগ্রণী স্থানটিকে এইভাবে আচরণ করা উচিত। যেমন .gitignoreএকটি ফাইল ফর্ম্যাট সঠিক নয়
কন Psych

24

pathlibপাইথন 3.4 থেকে ব্যবহার করুন ।

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

1
এটি সর্বোত্তম সমাধান
পারে


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

একটি পুরানো থ্রেড, তবে ভবিষ্যতের পাঠকদের সহায়তা করতে পারে ...

আপনার কোডটিকে আরও প্ল্যাটফর্মটি স্বতন্ত্র করে তোলা ছাড়া অন্য কোনও কারণ না হলে আমি ফাইলনামে .looer () ব্যবহার করা এড়াতে চাই । (লিনাক্সের হয় কেস sensistive, .lower () একটি ফাইল হবে নিশ্চয় দুর্নীতিগ্রস্ত আপনার যুক্তিবিজ্ঞান অবশেষে ... অথবা তার থেকেও খারাপ, একটি গুরুত্বপূর্ণ ফাইলের উপর!)

কেন রি ব্যবহার করবেন না ? (যদিও আরও শক্তিশালী হওয়া উচিত, আপনার প্রতিটি ফাইলের ম্যাজিক ফাইল শিরোনামটি পরীক্ষা করা উচিত ... পাইথনে এক্সটেনশন ছাড়াই কীভাবে ফাইলগুলি পরীক্ষা করতে হবে? )

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



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.