尝试在python中改进我的OOP,
我想添加许多有用的功能, 作为一个开始,我尝试列出
mp3,mp4,图片,并显示不支持的扩展程序列表,然后返回显示并在我的主项目中使用
import os
class Functions(object):
# templates/video/vids
def scan_dir(self, this_dir="/home/X/Videos", videos=[], images=[], audio=[], folder=[], denied=[]):
# EXTENSIONS #
##############
self.videos = videos
self.images = images
self.audio = audio
self.folder = folder
self.denied = denied
for files in os.scandir(this_dir):
# for files in this_dir:
#
## VIDEOS
###########
if files[:3] == "mp4" or files[:3] == "MP4" or files[:3] == "FLV" or files[:3] == "flv" :
videos.append(files)
## IMAGES
###########
elif files[:3] == "PNG" or files[:3] == "png" or files[:3] == "JPG" or files[:3] == "jpg" :
images.append(files)
## AUDIO
###########
elif files[:3] == "mp3" or files[:3] == "MP3" or files[:3] == "wav" or files[:3] == "WAV" :
audio.append(files)
## FOLDER
###########
elif files.name.startswith('.'):
folder.append(files)
## DENIED
###########
else:
denied.append(files)
VIDSTR = ' '.join(videos)
IMGSTR = ' '.join(images)
AUDSTR = ' '.join(audio)
FOLSTR = ' '.join(folder)
DENSTR = ' '.join(denied)
sorted_files = [VIDSTR, IMGSTR, AUDSTR, FOLSTR, DENSTR]
return sorted_files
答案 0 :(得分:0)
您可以进行一些更改。
您可以使用工厂功能根据文件的扩展名或其他模式对文件进行分类。还可以利用defaultdict
并根据每个文件的分类附加到它。
从您的代码中,不清楚您是否确实想要将文件名作为str
返回,该文件名为os.DirEntry.name
,或者只是对象os.DirEntry
,这就是您可以在这里传递给classify()
。
from collections import defaultdict
import os
def classify(file: os.DirEntry) -> int:
file = file.name.lower()
if file.endswith(('.mp4', '.flv')):
return 0
elif file.endswith(('.png', '.jpg')):
return 1
elif file.endswith(('.mp3', '.wav')):
return 2
elif file.startswith('.'):
return 3
else:
return 4
class Functions(object):
def __init__(self, this_dir="/home/X/Videos"):
self.this_dir = this_dir
self.allfiles = defaultdict(list)
def scan_dir(self) -> defaultdict:
for file in os.scandir(self.this_dir):
self.allfiles[classify(file)].append(file)
return self.allfiles
示例:
>>> f = Functions(this_dir='/Users/brad/Downloads/media/')
>>> f.scan_dir()
defaultdict(list,
{0: [<DirEntry 'movie2.mp4'>, <DirEntry 'movie.mp4'>],
1: [<DirEntry 'pic.png'>],
2: [<DirEntry 'music.wav'>, <DirEntry 'music2.mp3'>],
3: [<DirEntry '.hidden'>, <DirEntry '.DS_Store'>]})