Django中的os.path操作,更改/加入路径问题

时间:2018-01-09 18:48:29

标签: python django python-os

我在图像保存后获取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上运行,所以我想要一个无关紧要的操作系统。

2 个答案:

答案 0 :(得分:2)

  

所以我想修复操作系统无关紧要。

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

你说那个

  

我在Windows工作,最终部署可能将在Linux上

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

要完全独立于os,请执行此操作...您需要将原始路径拆分为“/”以获取所有子组件,然后使用os.path.join重新加入它们。

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

简而言之,问题的根源在于数据库包含Linux风格的路径,并且您正在Windows上处理它们。如果是相反的话,你会遇到类似的问题。

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

或者,编写代码只需从完整路径中删除扩展程序并将其替换为"_sz."+extension

答案 1 :(得分:0)

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

你也可以调查PathLib,虽然这对你来说可能有点过分。