Tôi đang làm việc trên một chương trình nhất định nơi tôi cần làm những việc khác nhau tùy thuộc vào phần mở rộng của tệp. Tôi chỉ có thể sử dụng này?
if m == *.mp3
...
elif m == *.flac
...
Tôi đang làm việc trên một chương trình nhất định nơi tôi cần làm những việc khác nhau tùy thuộc vào phần mở rộng của tệp. Tôi chỉ có thể sử dụng này?
if m == *.mp3
...
elif m == *.flac
...
Câu trả lời:
Giả sử m
là một chuỗi, bạn có thể sử dụng endswith
:
if m.endswith('.mp3'):
...
elif m.endswith('.flac'):
...
Không phân biệt chữ hoa chữ thường và để loại bỏ một chuỗi if-if tiềm năng lớn khác:
m.lower().endswith(('.png', '.jpg', '.jpeg'))
.split('.')[-1]
? Hoặc là sự hợp tác thực sự hiệu quả cao?
os.path
cung cấp nhiều chức năng để thao tác đường dẫn / tên tệp. ( tài liệu )
os.path.splitext
lấy một đường dẫn và tách phần mở rộng tập tin từ cuối của nó.
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."
Cung cấp:
/folder/soundfile.mp3 là một mp3! thư mục1 / thư mục / soundfile.flac là một tập tin flac!
/.mp3
không được coi là tệp mp3. Tuy nhiên, đây là cách một không gian hàng đầu nên được đối xử. Ví dụ: .gitignore
không phải là định dạng tệp
Nhìn vào mô-đun fnmatch. Điều đó sẽ làm những gì bạn đang cố gắng làm.
import fnmatch
import os
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.txt'):
print file
một cách dễ dàng có thể là:
import os
if os.path.splitext(file)[1] == ".mp3":
# do something
os.path.splitext(file)
sẽ trả về một tuple với hai giá trị (tên tệp không có phần mở rộng + chỉ phần mở rộng). Chỉ mục thứ hai ([1]) sẽ cung cấp cho bạn phần mở rộng. Điều thú vị là, bằng cách này, bạn cũng có thể truy cập tên tệp khá dễ dàng, nếu cần!
Một chủ đề cũ, nhưng có thể giúp độc giả tương lai ...
Tôi sẽ tránh sử dụng .lower () trên tên tệp nếu không vì lý do nào khác ngoài việc làm cho mã của bạn độc lập hơn với nền tảng. (linux là trường hợp nhạy cảm, .lower () trên tên tệp chắc chắn sẽ làm hỏng logic của bạn cuối cùng ... hoặc tệ hơn, một tệp quan trọng!)
Tại sao không sử dụng lại ? (Mặc dù để mạnh mẽ hơn nữa, bạn nên kiểm tra tiêu đề tệp ma thuật của mỗi tệp ... Làm cách nào để kiểm tra loại tệp không có phần mở rộng trong 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))
Đầu ra:
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, ví dụ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')