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,尽管这对您来说可能有点过头了。
图像保存后,我在 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,尽管这对您来说可能有点过头了。