Python -使用os.rename用于重命名和移动文件,但FOR中的最后一个会抛出文件正在使用错误



我有一些代码,通过内部代码的csv运行,并使用从csv中查找的外部代码重命名一些jpg,然后将所述图像移动到分组文件夹中。不用说,我对Python还是个新手。

代码工作正常-除了文件夹中的最后一个图像,它抛出以下错误:

File "C:UsersXXXDesktopImageRenametestresolution.py", line 74, in <module>
os.rename(oldPath,newPath)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\Users\XXX\Desktop\ImageRename\Images\11D003-003_3.jpg' -> 'C:\Users\XXX\Desktop\ImageRename\Processed\11D003-003\15243_3.jpg'

如果我在文件夹中添加更多的图像,有问题的jpg现在工作正常,但新的最后一张图像抛出错误。

下面是代码。(注意-上面有一些东西是不相关的,首先检查图像尺寸,似乎一切正常。如果有人认为这可能是冲突的,也会发布代码)。提前感谢!

# importing the module
import os
import PIL
from PIL import Image
import csv
path= r"C:UsersXXXDesktopImageRenameImages"  
allfiles = os.listdir(path)
# some other stuff in here I've omitted as I don't think it's relevant

if countbad > 0:
x = input("There are errors in images. Continue Anyway? Y/N")
if x == "Y":
myfile  = open('codes.csv')
reader = csv.reader(myfile)

processedpath=r"C:UsersXXXDesktopImageRenameProcessed"

rownum = 0
for row in reader:
if rownum == 0:
header = row
else:
sku = row[0]
thgid = row[1]
imgnumber = 1
while imgnumber < 9:
oldPath=os.path.join(path,sku+"_"+str(imgnumber)+".jpg")
if os.path.exists(oldPath):
newPath=os.path.join(processedpath,sku,thgid+"_"+str(imgnumber)+".jpg") 
newDir=os.path.join(processedpath,sku)
os.makedirs(newDir, exist_ok=True)
os.rename(oldPath, newPath)
imgnumber += 1
rownum += 1
myfile.close()```

代码的前一部分处理检查图像的大小和分辨率。原来我漏掉了这段代码中的一行,这一行保持了最后一个文件的打开状态,随后又断行了。

添加在:img.close()中(其中img是保存文件的变量),现在一切正常。

请仔细阅读错误信息,它清楚地告诉您问题所在。Python无法打开你的图像,因为它已经在另一个程序中打开了。

这个问题经常发生,因为文件在文件资源管理器中打开。

要解决此问题,请标识&终止正在访问映像的进程。如果你不知道怎么做,只要重新启动你的电脑并再次运行你的Python脚本-这应该可以解决这个问题。