Django项目中在Ubuntu下创建动态命名文件夹的问题
解决跨平台路径分隔符导致的文件夹创建问题
这个问题我之前在跨平台部署项目时也踩过坑,核心原因就是Windows和Linux的路径分隔符不兼容:Windows用反斜杠\作为路径分隔符,而Linux(包括你的Ubuntu 16.04)用正斜杠/。
你代码里用了原始字符串r'first_scrapy\spiders\tmp\{}',在Linux环境下,反斜杠不会被识别为路径分隔符,反而会被当作文件夹名称的一部分,所以才会生成first_scrapy\spiders\tmp\parfums-promo这种把整个路径串当成单个文件夹名的情况。
给你几个靠谱的解决办法:
方法一:用os.path.join拆分拼接所有路径部分(推荐)
这是Python跨平台路径处理的最佳实践,os.path.join会自动根据当前操作系统选择正确的分隔符:
name = "some-name" myDir = os.path.join(BASE_DIR, 'first_scrapy', 'spiders', 'tmp', name)
不管是Windows还是Linux,这个代码都会生成符合系统规范的路径,完全不用手动处理分隔符。
方法二:统一使用正斜杠/编写路径字符串
Python的路径处理模块在Windows下也能识别正斜杠,所以可以把路径里的反斜杠换成正斜杠:
name = "some-name" myDir = os.path.join(BASE_DIR, 'first_scrapy/spiders/tmp/{}'.format(name))
这种写法在两个系统下都能正常工作,Python会自动适配分隔符。
方法三:避免用原始字符串写带路径分隔符的路径
原始字符串(前缀r)会把里面的反斜杠原样保留,这在跨平台场景下很容易出问题,除非你明确需要保留转义字符,否则尽量不要用原始字符串写路径。
总结一下,最稳妥的就是方法一,完全交给os.path.join来处理路径拼接,能彻底杜绝这类跨平台路径问题。
内容的提问来源于stack exchange,提问作者Chiefir
相关产品推荐
相关产品推荐

