首页 > 解决方案 > Python我应该在阅读后关闭文件吗

问题描述

我正在使用 Django 1.10 和 Python 3.5.3

在其中一个视图中,用户正在发送一个文件,而我正在这样阅读它:

    def create(self, request, *args, **kwargs):
        file_serializer = self.get_serializer(data=request.data)
        file_serializer.is_valid(raise_exception=True)
        if file_serializer.is_valid():
            if 'file' in request.data:

                # hash file
                hasher = hashlib.md5()
                read_file = request.data['file'].read()
                hasher.update(read_file)
                current_file_hash = hasher.hexdigest()

我的问题是 - 之后我应该关闭文件吗?好像我真的没有打开它。

标签: pythondjangofile

解决方案


据我所知,request.data['file']实际上是一个打开的文件描述符,而不是文件名。如果您知道自己request会清理自己的资源,那么显然不需要显式关闭文件。否则,用 关闭它request.data['file'].close()。在这种情况下,最好将整个函数体包装在try/finally块中,以确保无论如何关闭文件:

try:
    # read from file etc.
finally:
    request.data['file'].close()

推荐阅读