问题描述
我正在尝试使用 Python 重命名新创建的转换后的 jpg,但每次重命名文件时,我都会收到错误消息,该进程无法访问该文件,因为它正被另一个进程使用。即使我在函数的第一个 for 循环中关闭打开的图像,我仍然会收到此错误。我需要做些什么不同的事情才能完成这项工作?下面是我的代码:
import os
import PIL
from PIL import Image
import shutil
def convert_image_to_jpeg(directory,newImagePath,upc):
for root,directories,files in os.walk(directory):
for file in files:
imagePath = os.path.join(root,file)
charstrip = imagePath
charstrip = charstrip[charstrip.rindex('.')+1:]
charcount = len(charstrip)
newFilePath = imagePath[:-charcount] + 'jpg'
originalImage = Image.open(imagePath)
originalImage_rgb = originalImage.convert('RGB')
originalImage_rgb.save(newFilePath)
shutil.move(newFilePath,newImagePath)
for root,files in os.walk(newImagePath):
for a in files:
b = a.split('_')
c = b[1]
print(c)
newFileNamePrefix = upc + '_A'
print(newFileNamePrefix)
newFileName = newFileNamePrefix + c
print(newFileName)
renamedImagePath = os.path.join(root,newFileName)
print(renamedImagePath)
os.rename(newImagePath,renamedImagePath)
解决方法
我发现了这个问题。我没有为 os.rename 方法提供要重命名的原始图像的完整路径。新的工作代码如下所示:
import os
import PIL
from PIL import Image
import shutil
def convert_image_to_jpeg(directory,newImagePath,upc):
for root,directories,files in os.walk(directory):
for file in files:
imagePath = os.path.join(root,file)
charstrip = imagePath
charstrip = charstrip[charstrip.rindex('.')+1:]
charcount = len(charstrip)
newFilePath = imagePath[:-charcount] + 'jpg'
originalImage = Image.open(imagePath)
originalImage_rgb = originalImage.convert('RGB')
originalImage_rgb.save(newFilePath)
originalImage.close()
shutil.move(newFilePath,newImagePath)
for root,files in os.walk(newImagePath):
for a in files:
jpegImagePath = os.path.join(root,a)
b = a.split('_')
c = b[1]
print(c)
newFileNamePrefix = upc + _A'
print(newFileNamePrefix)
newFileName = newFileNamePrefix + c
print(newFileName)
renamedImagePath = os.path.join(root,newFileName)
print(renamedImagePath)
os.rename(jpegImagePath,renamedImagePath)