如何在自定义Django上传处理程序中逐行阅读?

时间:2016-05-10 14:47:32

标签: python django

我正在处理 SDF files(〜多GB)并且想要计算每个中的分子数并将其存储在数据库中。现在我在上传文件之后将其作为一个单独的循环进行,但这意味着需要花费很长时间来迭代文件一段时间,并在文件上传后完成,因此不会向用户提供进度信息。

我的计划是在自定义上传处理程序中计算等于:$$$$的行数,然后以某种方式将该数字放在模型上并保存模型。我仍然是Python的新手,当我意识到我得到一大块数据并且无法找到从上传中逐行读取的好方法时,我完全陷入困境。 Django中是否有一些Handler逐行读取,我可以使用或者我必须自己制作?如果我必须自己制作,考虑到总数据的大小,我应该使用什么样的数据结构作为本地缓存来快速处理我的处理程序?

这是我到目前为止::))

class CountSDFEntries(FileUploadHandler):
    def receive_data_chunk(self, raw_data, start):
        return raw_data

    def file_complete(self, file_size):
        return None

1 个答案:

答案 0 :(得分:1)

我最终得到了这段代码:

class CountSDFEntries(FileUploadHandler):

    def __init__(self, request, datasetModel):
        FileUploadHandler.__init__(self, request)
        self.datasetModel = datasetModel

    cache = ""
    numofmols = 0
    datasetModel = None;

    def receive_data_chunk(self, raw_data, start):
        self.cache += raw_data
        lines = self.cache.splitlines()
        self.cache = lines[-1]
        del lines[-1]
        for line in lines :
            if line.rstrip() == "$$$$":
                self.numofmols += 1
        return raw_data

    def file_complete(self, file_size):
        #The last line is still in the cache, so + 1
        self.datasetModel.numberOfMols = self.numofmols + 1 
        return None

然而,文件上传后仍有很长的等待时间,我现在想知道是否可能是从Django将文件从/tmp/移动到文件应该到底的位置。所以这并没有真正解决我上传文件后等待时间过长的问题。 :(