Dosyanın uzantısına bağlı olarak farklı şeyler yapmam gereken belirli bir program üzerinde çalışıyorum. Bunu sadece kullanabilir miyim?
if m == *.mp3
...
elif m == *.flac
...
Dosyanın uzantısına bağlı olarak farklı şeyler yapmam gereken belirli bir program üzerinde çalışıyorum. Bunu sadece kullanabilir miyim?
if m == *.mp3
...
elif m == *.flac
...
Yanıtlar:
m
Bir dize olduğunu varsayarak şunları kullanabilirsiniz endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Büyük / küçük harfe duyarsız olmak ve büyük olasılıkla büyük olan bir zinciri ortadan kaldırmak için:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? Yoksa bölüm gerçekten yüksek verimlilik mi?
os.path
yolları / dosya adlarını değiştirmek için birçok işlev sağlar. ( dokümanlar )
os.path.splitext
bir yol alır ve dosya uzantısını sonuna kadar böler.
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."
verir:
/klasor/soundfile.mp3 bir mp3! folder1 / folder / soundfile.flac bir flac dosyasıdır!
/.mp3
, bu nedenle mp3 dosyası olarak kabul edilmez. Ancak bu, önde gelen bir boşluğun tedavi edilmesi gereken yoldur. Örneğin .gitignore
bir dosya biçimi değildir
Module fnmatch dosyasına bakın. Yapmaya çalıştığınız şey bu olacak.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
kolay bir yol olabilir:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
iki değere sahip bir demet döndürür (uzantısız dosya adı + yalnızca uzantı). İkinci indeks ([1]) size sadece dahili numarayı verecektir. Güzel olan şey, bu şekilde dosya adına da gerekirse kolayca erişebilirsiniz!
Eski bir ileti dizisi, ancak gelecekteki okuyuculara yardımcı olabilir ...
Ben ediyorum önlemek kullanarak ) (.lower kodunuzu daha platform bağımsız hale etmekten başka bir nedenden dolayı eğer dosya adları üzerinde. (linux büyük / küçük harfe duyarlıdır, bir dosya adındaki .lower () mutlaka mantığınızı bozacaktır ... ya da daha kötüsü önemli bir dosya!)
Neden re kullanmıyorsunuz ? (Daha sağlam olmasına rağmen, her dosyanın sihirli dosya başlığını kontrol etmelisiniz ... Python'da uzantısız dosya türü nasıl kontrol edilir? )
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))
Çıktı:
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 içeren dosyalar için çalışmaz , örneğinsome.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')