我正在尝试使用以下方法删除临时文件:
os.remove(str('temp.bin'))
这是完整的功能,请注意我正在使用 API (XWF) 将数据读入文件,它可以正常工作。当它接收到有效图像时,它工作正常,因此问题不在此关闭范围之内。该代码仅在收到无效图像文件时才会出现问题。我将输入读入临时文件,因为它适用于我的解决方案,这里的问题是当它们不是有效图像时它不会删除它们。我不是在寻找关于为什么在将图像写入临时文件之前检测它是否是图像会更好的讲座。幽默我,现在假设我这样做是有充分理由的。
import OutputRedirector
import XWF
import os
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
gps_data = {}
def XT_ProcessItemEx(nItem, hItem, reserved):
global gps_data
fn = XWF.GetItemName(nItem)
offset = 0
size = XWF.GetItemSize(nItem)
if offset < size:
tempfn = fn + '.bin'
f = open(tempfn, 'wb')
buffer = XWF.Read(hItem, offset, size)
f.write(buffer)
f.close()
try:
image = Image.open(tempfn)
exif_data = get_exif_data(image)
gps = get_lat_lon(exif_data)
if gps[0]:
gps_data[fn] = (repr(gps[0]), repr(gps[1]))
print('Found GPS data in %s' % fn)
else:
print('No GPS data in image %s' % fn)
del image
os.remove(str(tempfn)) # it works fine here
except IOError:
print('Not an image')
os.remove(str(f)) # but it won't work here
else:
print('File too small')
return
如果我不按原样保留该行并且不使用 str() 附件,我会收到此错误:
TypeError : must be string, not file
正如我得到这个错误:
WindowsError : [Error 123] The filename, directory name, or volume
label syntax is incorrect: "<closed file u'file.pdf.bin',
mode 'wb' at 0x0A82A0D0>"
如果我在函数/方法根级别返回之前直接移动有问题的行,我会收到此错误:
WindowsError : [Error 32] The process cannot access the file because
it is being used by another process
我不确定为什么它适用于 image 但不适用于 f。