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

2024-10-03 21:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理largeSDF files(~multiple GB),我想计算每个分子中的分子数并将其存储在数据库中。现在我把它作为一个单独的循环在文件上传后,但这意味着迭代文件一个额外的时间,这需要很长的时间,是在文件上传后完成,所以没有给用户进度信息。在

我的计划是在一个定制的上传处理程序中计算等于:$$$$的行数,然后以某种方式将这个数字放在模型上并保存模型。不过,我对Python还是个新手,当我意识到我得到了一大块数据,却找不到一个很好的方法来逐行读取上传的内容时,我完全不知所措。Django中是否已经有一些处理程序可以逐行读取,我可以使用它,还是必须自己制作?如果我真的要自己制作,考虑到总数据量很大,我应该使用什么样的数据结构作为本地缓存来保持处理程序中的速度?在

这是我目前所掌握的:)

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

    def file_complete(self, file_size):
        return None

Tags: 文件模型self处理程序datarawreturndef
1条回答
网友
1楼 · 发布于 2024-10-03 21:35:11

最后我得到了这个密码:

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/移到文件最后应该放在的地方。所以这并没有真正解决我上传文件后等待时间过长的问题。:(

相关问题 更多 >