os.path Django 中的操作,change/join 路径问题

os.path operation in Django, change/join path issue

图像保存后,我在 Django 中获取文件名:

path->    'companies/92_dsa/log/Hydrangeas.jpg' as it is in database

我克隆了文件,调整了大小(是图像)并想用不同的名称保存新文件。

我得到原始文件的目录:

folder = os.path.dirname(path)

文件名和扩展名:

  filename, extension = os.path.splitext(os.path.basename(media_path))

然后创建一个

new_filename =  filename + '_sz' + extension

我想重新创建路径:

new_path = os.path.join(folder, new_filename)

和问题(文件名前的斜线-反斜线):

'companies/94_sda/logos\Hydrangeas_sz.jpg'

我在 Windows 工作,但最终部署可能会在 Linux,所以我想要一个与 OS 无关的修复。

so I want a fix indifferent of the OS.

不幸的是,你不能真正吃蛋糕。

你这么说

I'm working in Windows, bur the final deploy probably will be on Linux

这意味着您是 运行 Windows 上的程序,但处理 *nix 文件名(无论是 Linux、Unix 还是 mac OS).

要完全 os 独立...您需要在“/”上拆分原始路径以获取所有子组件,然后使用 os.path.join 重新加入它们。

但是您需要处理绝对路径的目录结构在两个 OS 之间非常不同的事实 - 更不用说 Windows 上的前导驱动器说明符了。如果您只处理相对路径,这不是什么大问题。

简而言之,问题的根源在于数据库包含 Linux 样式的路径,而您正在 Windows 上处理它们。如果反过来,你会遇到类似的问题。

您需要选择os您的部署平台和代码。

或者,编写您的代码以简单地从完整路径中删除扩展名并将其替换为 "_sz."+extension

由于您实际上并不关心与主机相关的路径 OS(因为您已选择在数据库中存储路径 POSIX 样式),您可以只使用字符串连接:new_path = '/'.join([folder, new_filename]),或者您可以直接导入 posixpath 模块 import posixpath; new_path = posixpath.join(folder, new_filename).

您也可以调查 PathLib,尽管这对您来说可能有点过头了。