मैं फ़ाइल के विस्तार की जांच कैसे कर सकता हूं?


178

मैं एक निश्चित कार्यक्रम पर काम कर रहा हूं, जहां मुझे फ़ाइल के विस्तार के आधार पर अलग-अलग चीजें करने की आवश्यकता है। क्या मैं सिर्फ इसका इस्तेमाल कर सकता हूं?

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

मिलान के लिए अजगर रे मॉड्यूल (रेगेक्स) का उपयोग करें
केफिझो

21
@kefeizhou: ओह भगवान नहीं, साधारण मैचों के लिए नहीं।
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
@WilhelmMurdoch मैंने लगभग आपकी टिप्पणी नहीं देखी, मुझे खुशी हुई।
फ्लेयर्ड

@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 एक एमपी 3 है!
folder1 / folder / soundfile.flac एक flac फाइल है!

यह विधि अग्रणी अवधियों को अनदेखा करती है इसलिए /.mp3इसे एमपी 3 फ़ाइल नहीं माना जाता है। यह हालांकि एक प्रमुख स्थान है जिस तरह से व्यवहार किया जाना चाहिए। जैसे .gitignoreकोई फ़ाइल प्रारूप नहीं है
kon psych


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 ( कोई अन्य कारण से यदि आपका कोड अधिक मंच स्वतंत्र बनाने के लिए की तुलना में फ़ाइल नाम पर। (linux है मामले 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

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
निक

3
आप उस किनारे के मामले को पकड़ने के लिए [-1] कर सकते थे।
क्रिश्चियन पपथनसीउ

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'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.