在模型保存时解析 CSV 的前 n 行



我有一个模型,用户可以在其中上传CSV,但是由于文件有时可能太大,我想解析上传的CSV的前5行并创建一个新的CSV文件。这将充当示例文件,稍后使用起来会更小、更快。

这是我的models.py的样子:

from django.db import models
class Source(models.Model):
file = models.FileField()
sample = models.FileField(blank=True, null=True)
name = models.CharField(max_length=255)
def save(self, *args, **kwargs):
# I want to parse the 'file' field and write it to 'sample' here

super(Source, self).save(*args, **kwargs)
def __str__(self):
return self.name

基本上在模型的保存功能中,我想解析file字段的前 5 行并获取前 5 行,创建一个 CSV 并将其上传到sample字段'。关于我如何实现这一目标的任何想法?谢谢。

import csv
import io
from django.core.files.base import ContentFile
from django.db import models
class Source(models.Model):
file = models.FileField()
sample = models.FileField(blank=True, null=True)
name = models.CharField(max_length=255)
_generate_sample = True
def save(self, *args, **kwargs):
super(Source, self).save(*args, **kwargs)
if self.file and self._generate_sample:
with open(self.file.path) as f:
reader = csv.reader(f)
lines = [next(reader) for x in xrange(5)]
output = io.BytesIO()
writer = csv.writer(output)
writer.writerows(lines)
self._generate_sample = False
self.sample.save('short.csv', ContentFile(output.getvalue()))
def __str__(self):
return self.name

最新更新