简短的问题;有没有办法确保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