Saya sedang mengerjakan program tertentu di mana saya perlu melakukan berbagai hal tergantung pada ekstensi file. Bisakah saya menggunakan ini?
if m == *.mp3
...
elif m == *.flac
...
Saya sedang mengerjakan program tertentu di mana saya perlu melakukan berbagai hal tergantung pada ekstensi file. Bisakah saya menggunakan ini?
if m == *.mp3
...
elif m == *.flac
...
Jawaban:
Dengan asumsi m
string, Anda dapat menggunakan endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Menjadi case-insensitive, dan untuk menghilangkan rantai besar lain-jika:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? Atau rpartition benar-benar efisiensi yang tinggi?
os.path
menyediakan banyak fungsi untuk memanipulasi path / nama file. ( dok )
os.path.splitext
mengambil jalur dan memisahkan ekstensi file dari ujungnya.
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."
Memberi:
/folder/soundfile.mp3 adalah mp3! folder1 / folder / soundfile.flac adalah file flac!
/.mp3
tidak dianggap sebagai file mp3. Namun ini adalah cara ruang terkemuka harus diperlakukan. Misalnya .gitignore
bukan format file
Lihatlah modul fnmatch. Itu akan melakukan apa yang Anda coba lakukan.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
salah satu cara mudah bisa:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
akan mengembalikan tuple dengan dua nilai (nama file tanpa ekstensi + hanya ekstensi). Indeks kedua ([1]) akan memberikan Anda hanya ekstensi. Yang keren adalah, dengan cara ini Anda juga dapat mengakses nama file dengan cukup mudah, jika perlu!
Utas lama, tetapi dapat membantu pembaca di masa mendatang ...
Saya akan menghindari penggunaan .lower () pada nama file jika tanpa alasan lain selain membuat kode Anda lebih mandiri. (linux adalah kasus sensistive, .lower () pada nama file pasti akan korup logika Anda akhirnya ... atau lebih buruk, file penting!)
Mengapa tidak menggunakan ulang ? (Meskipun untuk menjadi lebih kuat, Anda harus memeriksa header file ajaib dari setiap file ... Bagaimana memeriksa jenis file tanpa ekstensi dalam python? )
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))
Keluaran:
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"
.
, misalnyasome.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')