Ich arbeite an einem bestimmten Programm, bei dem ich je nach Dateierweiterung verschiedene Aufgaben ausführen muss. Könnte ich das einfach benutzen?
if m == *.mp3
...
elif m == *.flac
...
Ich arbeite an einem bestimmten Programm, bei dem ich je nach Dateierweiterung verschiedene Aufgaben ausführen muss. Könnte ich das einfach benutzen?
if m == *.mp3
...
elif m == *.flac
...
Antworten:
Angenommen, es m
handelt sich um eine Zeichenfolge, können Sie Folgendes verwenden endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Um die Groß- und Kleinschreibung nicht zu berücksichtigen und eine potenziell große else-if-Kette zu eliminieren:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? Oder ist die Partitionierung wirklich hocheffizient?
os.path
bietet viele Funktionen zum Bearbeiten von Pfaden / Dateinamen. ( docs )
os.path.splitext
nimmt einen Pfad und teilt die Dateierweiterung vom Ende auf.
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."
Gibt:
/folder/soundfile.mp3 ist ein mp3! folder1 / folder / soundfile.flac ist eine flac-Datei!
/.mp3
nicht als MP3-Datei betrachtet. Dies ist jedoch die Art und Weise, wie ein führender Raum behandelt werden sollte. ZB .gitignore
ist kein Dateiformat
Schauen Sie sich das Modul fnmatch an. Das wird tun, was Sie versuchen zu tun.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
Ein einfacher Weg könnte sein:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
gibt ein Tupel mit zwei Werten zurück (der Dateiname ohne Erweiterung + nur die Erweiterung). Der zweite Index ([1]) gibt Ihnen daher nur die Erweiterung. Das Coole ist, dass Sie auf diese Weise bei Bedarf auch ganz einfach auf den Dateinamen zugreifen können!
Ein alter Thread, kann aber zukünftigen Lesern helfen ...
Ich würde die Verwendung von .lower () für Dateinamen vermeiden , wenn es keinen anderen Grund gibt, als Ihren Code plattformunabhängiger zu machen. (Linux ist Fall Empfindlicher, .unterhalb () auf einem Dateinamen wird sicherlich korrupt Ihre Logik schließlich ... oder noch schlimmer, eine wichtige Datei!)
Warum nicht re verwenden ? (Um noch robuster zu sein, sollten Sie den Magic File Header jeder Datei überprüfen ... Wie kann man den Dateityp ohne Erweiterungen in Python überprüfen? )
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))
Ausgabe:
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"
.
s enthalten, zum Beispielsome.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')