我在图像保存后获取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上运行,所以我想要一个无关紧要的操作系统。
答案 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,虽然这对你来说可能有点过分。