python按扩展名分隔文件,并相应地保存到文件夹中

python按扩展名分隔文件,并相应地保存到文件夹中,python,django,Python,Django,我得到的文件名作为实例和文件很容易保存到数据库没有任何问题。但是我需要检查文件扩展名,并像这样单独保存文件 我期望这样的输出 单独的文件扩展名并相应地保存 phots image1.jpg image2.jpg text text1.txt text2.txt 这是我的模型课 class Album(models.Model): file_upload = models.FileField(upload_to=content_file_name) name_conten

我得到的文件名作为实例和文件很容易保存到数据库没有任何问题。但是我需要检查文件扩展名,并像这样单独保存文件

我期望这样的输出 单独的文件扩展名并相应地保存

phots
 image1.jpg
 image2.jpg
text
 text1.txt
 text2.txt
这是我的模型课

class Album(models.Model):
    file_upload = models.FileField(upload_to=content_file_name)
    name_content = models.CharField(max_length=100)
函数就在这里

def content_file_name(instance, filename):
    upload_dir = os.path.join('uploads', 'resource')
    return os.path.join(upload_dir, filename)
使用splitext获取扩展名:


您可以使用.endswith功能并检查

    if filename.endswith("jpg") or silename.endswith("jpeg"):
         subdir = "phots"
    elif filename.endswith("txt") or filename.endswith("asc"):
         subdir = "docs"

与if/else语句相比,我更喜欢map语句,因为它更易于扩展

dir_map = {".jpg"  : "photos",
           ".jpeg" : "photos",
           ".png"  : "photos",
           ".txt"  : "text",
           ".asc"  : "text"
          }
_, ext = os.path.splitext(filename)
subdir = dir_map.get(ext, "other")
return os.path.join("uploads", "resource", dir_map.get(ext, "other"), filename)

查看是否要向上传的文件添加时间戳,如timestampimage.jpg。如何操作?只需使用os.path.joinupload_dir,strdatetime.datetime.now+filename或使用格式化字符串os.path.joinupload_dir,{:%Y-%m-%dT%H%m%S}{}{}.formatdatetime.datetime.now,filename
dir_map = {".jpg"  : "photos",
           ".jpeg" : "photos",
           ".png"  : "photos",
           ".txt"  : "text",
           ".asc"  : "text"
          }
_, ext = os.path.splitext(filename)
subdir = dir_map.get(ext, "other")
return os.path.join("uploads", "resource", dir_map.get(ext, "other"), filename)