os.path.exists 返回 False,但 os.path.abspath 返回路径

问题描述

代码应从 xlsx 文件提取图片并保存副本并在新目录中将其重命名 3 次。 os.mkdir 在桌面上创建目录并保存第一张图片但之后我得到

    os.rename(filename,new_name)
FileNotFoundError: [WinError 2] Impossible  to find the specified file: 'image1.jpeg' -> 'newPicone0.jpeg

当我检查目录的绝对路径时,我得到了这个 os.path.abspath('renamedPix') 'C:\\Users\\divel\\Desktop\\XLSpix\\renamedPix' 即使该目录不在 XLSpix 文件夹中,而是在桌面上。

检查目录的存在我得到这个: os.path.exists('renamedPix') False

我不明白是什么导致了问题。 完整代码如下:

from zipfile import ZipFile
import re
import os
import shutil

file_name= "fote.xlsx"
directory= "renamedPix"
parent_dir = "C:\\Users\\divel\\Desktop"
path = os.path.join(parent_dir,directory)
os.mkdir(path)

with ZipFile(file_name,'r') as zipObj:
     counter = 0
     
     for file in zipObj.infolist():
         name = file.filename
         match = re.findall("jpeg$",name)
         
         if match:
            filename = os.path.basename(file.filename)
            
            for i in range(3):
                source = zipObj.open(file)
                target = open(os.path.join(path,filename),'wb')
                
                with source,target :
                    shutil.copyfileobj(source,target)
                pic_names = ['one','two','three']
                new_name = 'newPic'+pic_names[i]+str(counter)+'.jpeg'
                os.rename(filename,new_name)
            counter += 1

感谢您的帮助。

解决方法

将我的评论变成答案:问题在于 os.rename() 的参数只是文件名,而不是路径名。因此操作系统试图重命名当前工作目录中的文件(它们不存在)。传递完整路径名以重命名可解决此问题:

os.rename(os.path.join(path,filename),os.path.join(path,newname))