मैं एक निश्चित कार्यक्रम पर काम कर रहा हूं, जहां मुझे फ़ाइल के विस्तार के आधार पर अलग-अलग चीजें करने की आवश्यकता है। क्या मैं सिर्फ इसका इस्तेमाल कर सकता हूं?
if m == *.mp3
...
elif m == *.flac
...
मैं एक निश्चित कार्यक्रम पर काम कर रहा हूं, जहां मुझे फ़ाइल के विस्तार के आधार पर अलग-अलग चीजें करने की आवश्यकता है। क्या मैं सिर्फ इसका इस्तेमाल कर सकता हूं?
if m == *.mp3
...
elif m == *.flac
...
जवाबों:
मान लें m
कि एक स्ट्रिंग है, तो आप उपयोग कर सकते हैं endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
केस-असंवेदनशील होने के लिए, और संभावित रूप से बड़ी-यदि श्रृंखला को समाप्त करने के लिए:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? या क्या विखंडन वास्तव में उच्च दक्षता है?
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
कोई फ़ाइल प्रारूप नहीं है
pathlib
पायथन 3.4 से आगे का उपयोग करें ।
from pathlib import Path
Path('my_file.mp3').suffix == '.mp3'
मॉड्यूल fnmatch को देखो। वही करेंगे जो आप करने की कोशिश कर रहे हैं।
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
एक आसान तरीका हो सकता है:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
दो मूल्यों के साथ एक टपल लौटाएगा (विस्तार के बिना फ़ाइल नाम + सिर्फ विस्तार)। दूसरा सूचकांक ([1]) आपको केवल विस्तार देगा। अच्छी बात यह है, कि इस तरह आप जरूरत पड़ने पर फ़ाइल नाम को भी आसानी से एक्सेस कर सकते हैं!
एक पुराना धागा, लेकिन भविष्य के पाठकों की मदद कर सकता है ...
मैं होता बचने का उपयोग कर ) .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
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
if (file.split(".")[1] == "mp3"):
print "its mp3"
elif (file.split(".")[1] == "flac"):
print "its flac"
else:
print "not compat"
.
एस युक्त फ़ाइलों के लिए काम नहीं करेगा , उदाहरण के लिएsome.test.file.mp3
#!/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'
file='test.xlsx'
if file.endswith('.csv'):
print('file is CSV')
elif file.endswith('.xlsx'):
print('file is excel')
else:
print('none of them')