0

图像保存后,我在 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 中工作,bur 最终部署可能会在 Linux 上,所以我想要一个与操作系统无关的修复程序。

4

2 回答 2

2

所以我想要修复对操作系统漠不关心的问题。

不幸的是,你不能真正拥有你的蛋糕并吃掉它。

你这么说

我在 Windows 中工作,bur 最终部署可能会在 Linux 上

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

要做到这一点完全独立于操作系统......您需要在“/”上拆分原始路径以获取所有子组件,然后使用os.path.join.

但是您需要处理这样一个事实,即绝对路径的目录结构在两个操作系统之间非常不同 - 更不用说 Windows 上的主要驱动器说明符了。如果您只处理相对路径,这不是一个问题。

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

您需要为其选择部署平台和代码。

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

于 2018-01-09T18:57:36.750 回答
0

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

您也可以调查PathLib,尽管这对您来说可能是多余的。

于 2018-01-09T19:38:23.920 回答