我的项目中有这段代码:
name = "some-name"
myDir = os.path.join(BASE_DIR, r'first_scrapyspiderstmp{}'.format(name))
我正在 Windows 上开发,这有效 - 它会创建一个文件夹,其中包含我设置name
。但是当我在Ubuntu 16.04
上部署此代码时 - 此代码创建名称为first_scrapyspiderstmpparfums-promo
的文件夹 - 文件夹的路径将成为文件夹名称。
我怎样才能避免这种情况?
这是一个很好的示例,说明何时将os.path.join()
用于系统路径 - 在Windows中,分隔目录。Ubuntu 使用
/
.
os.path.join()
选择正确的一个,所以你不必这样做。
基于 Unix 的路径
在基于 Unix 的系统中,路径中的目录通常用正斜杠 (/
) 分隔。因此,我们可以简单地将其重写为:
# Unix-based operating systems
name = "some-name"
myDir = os.path.join(BASE_DIR,'first_scrapy/spiders/tmp/{}'.format(name))
独立于操作系统的解决方案
但是,如果您希望编写跨不同操作系统运行的应用程序,则可以使用os.path.join
。例如:
# works on "all" operating systems (well, those suported by the os module)
name = "some-name"
myDir =os.path.join(BASE_DIR, 'first_scrapy', 'spiders', 'tmp', name)
跨不同操作系统提供功能实际上是os
模块旨在处理的主要任务之一。