os.path.join 不加入目录和文件

os.path.join not join directory and file

我写了一个简单的函数,我相信我做得很好,但是我出错了。

我的代码:

array = ['/home/sergey/Документы/008.jpeg']
save_dir = os.path.join(os.path.dirname(array[0]), "Converted_files")
os.makedirs(save_dir)

for file in array:
    if file.endswith(srcSfx):
        im = Image.open(file).convert("RGB")
        print (save_dir)
        p = os.path.join(save_dir, file[:-len(srcSfx)] + destSfx)
        print(p)
        im.save(p, destSfx)

我想创建一个文件夹并在其中保存一些图像。但是图像保存在原始文件夹中,而不是 'save_dir' 文件夹中。

代码打印输出:

/home/sergey/Документы/Converted_files
/home/sergey/Документы/008.png

为什么'008.png'没有放入'save_dir'

如果array中的文件名是绝对路径,这将不起作用。 join 将从绝对路径重新启动文件名。例如,Windows join('C:/x', 'C:/y') 结果为 'C:/y'。在 Linux, join('/x', '/y') returns '/y'.

在你的循环中 file[:-len(srcSfx)] + destSfx 是一个绝对路径,所以预期的前缀 save_dir 被简单地丢弃了。为避免这种情况,在构建 save_dir:

时调用 basename similarly to how you used dirname
p = os.path.join(save_dir, os.path.basename(file)[:-len(srcSfx)] + destSfx)

作为未成年人,我通常更喜欢导入像

这样的名字
from os.path import basename, dirname, join

在那种情况下,结果会更短且更易于阅读:

save_dir = join(dirname(array[0]), "Converted_files")
...
    join(save_dir, basename(file)[:-len(srcSfx)] + destSfx)