Python强制释放文件(hachoir.parser)

时间:2018-06-02 17:05:29

标签: python-2.7 hachoir-parser

简短的问题;有没有办法确保Python脚本发布已打开的文件?它似乎是一个负责的库,所以我没有直接访问文件句柄。

我的程序尝试从媒体文件中识别一些元数据,并根据数据重命名或移动文件。代码调用下面的extract_date()方法来检索日期信息,它本身工作正常,hachoir-metadata库确实找到了它的信息。

似乎hachoir对象在此方法之后不释放文件,因此稍后对file.rename()的调用将因WindowsError 32而失败(文件正由另一个进程使用)。一旦我删除代码的hachoir部分,一切都按预期工作,所以我猜这部分不知何故保持锁定文件?

我已尝试使用以下命令释放_parser和_metadata句柄:“_ parser = None”,“del _parser”甚至“gc.collect()”但没有成功。

import hachoir_metadata, hachoir_parser

#A bunch of other code...


def extract_date( self, formatter ):

    #Other ways to extract a date is tried here. 

    #Try to extract using hachoir-metadata
    try:
        _parser =  hachoir_parser.createParser( unicode( self.get_path( True ) ) )
        _metadata = hachoir_metadata.extractMetadata( _parser )
        self.__date = _metadata.getValues( "creation_date" )[ 0 ]
        self.__date_type = self.HACHOIR_DATA
        return True
    except:
        pass


    #Try to guess the date based on the filename
    _guess = formatter.guess_timestamp_from_string( self.__filename )
    if _guess:
        self.__date = _guess
        self.__date_type = self.FILENAME_DATA
        return True

    return False

0 个答案:

没有答案