Python Django解压文件,向数据库添加内容
我正在尝试创建一个系统,使管理员能够上传zipfile,然后脚本将自动使用Python Django解压文件,向数据库添加内容,python,database,django,os.walk,Python,Database,Django,Os.walk,我正在尝试创建一个系统,使管理员能够上传zipfile,然后脚本将自动使用信号,解压缩它,搜索jpg,png中的所有文件。创建它们的列表,并根据该列表生成数据库记录 在模型中,我有Project和Photo表,Photo有多对一aka外键与Project的关系 下面的脚本是我正在工作的信号。我可以无错误地获取instance.file\u zip.path,并且脚本在手动运行时运行良好 经过长时间的调试,我假设attown\u to=instance有问题,但我不知道如何修复它,因为我不知道它为
信号
,解压缩它,搜索
jpg,png
中的所有文件。创建它们的列表
,并根据该列表生成数据库记录
在模型中,我有Project
和Photo
表,Photo
有多对一
aka外键
与Project
的关系
下面的脚本是我正在工作的信号。我可以无错误地获取instance.file\u zip.path
,并且脚本在手动运行时运行良好
经过长时间的调试,我假设attown\u to=instance
有问题,但我不知道如何修复它,因为我不知道它为什么会产生错误。
提取部分很好,我只是把它们放在这里作为参考,很可能你不需要阅读和理解它
@receiver(post_save, sender=Project)
def unzip_and_process(sender, instance, **kwargs):
#project_zip = FieldFile.open(file_zip, mode='rb')
file_path = instance.file_zip.path
file_list = []
with zipfile.ZipFile(file_path, 'r') as project_zip:
project_zip.extractall(re.search('[^\s]+(?=\.zip)', file_path).group(0))
project_zip.close()
for root, dirs, files in os.walk(file_path):
for filename in files:
file_list.append(os.path.join(root, filename))
photo_list = filter(filter_photos, file_list)
for photo in photo_list:
print 'Processing %s'%photo
p = Photo.objects.create(belongs_to=instance, img=photo, desc='Processed from zipfile')
p.save()
更新
class Project(models.Model):
project_name=models.CharField(max_length=150)
date_taken=models.DateField()
date_deadline=models.DateField()
price=models.FloatField()
price_paid=models.BooleanField()
owner=models.ForeignKey(User)
file_zip=models.FileField(upload_to='projects/%Y/%m/%d')
def __unicode__(self):
return self.project_name
def file_path(self):
return re.search('[^\s]+(?=\.zip)', self.file_zip.name).group(0)
class Photo(models.Model):
def project_path(instance, filename):
return '%s/%s'%(instance.belongs_to.file_path(),filename)
belongs_to=models.ForeignKey(Project, verbose_name="related_project")
img=models.ImageField(upload_to=project_path, max_length=255)
desc=models.CharField(max_length=255)
def __unicode__(self):
return '%s FROM [%s]'%(self.img.name,self.belongs_to)
file\u路径
指的是zip
文件。不是目录
,因此os.walk
不返回任何内容
file\u路径
指的是zip
文件。不是目录
,因此os.walk
不返回任何内容django photologue有你想要的东西,他们创建了一个类似的方法来上传zipfile
链接:以防你不想用谷歌搜索
更重要的是,zip上传类是GalleryUpload(models.Model)django photologue有一些你想要的东西,他们创建了一个类似的方法来上传zipfile 链接:以防你不想用谷歌搜索
此外,zip上传类是GalleryUpload(models.Model)将错误添加到您的帖子中。还可以添加与错误实际相关的任何其他代码,如
post_save
或Project
。它连接到一个发出无声错误的信号。不会显示错误,但不会创建数据库条目,但会进行提取和文件列表/筛选。我很确定Project类是不相关的,但我马上就要添加它了。为什么要使用ZipFile.extractall()
?从ZipFile提取所有文件?请将错误添加到您的帖子中。还可以添加与错误实际相关的任何其他代码,如post_save
或Project
。它连接到一个发出无声错误的信号。不会显示错误,但不会创建数据库条目,但会进行提取和文件列表/筛选。我很确定Project类是不相关的,但我马上就要添加它了。为什么要使用ZipFile.extractall()
?从一个ZipFile中提取所有文件?这几乎是我一直尝试编写的东西。嗯,最好是根据我的要求查看和编辑。干杯。这和我一直想写的差不多。嗯,最好是根据我的要求查看和编辑。干杯
for root, dirs, files in os.walk(file_path):