如何在Windows开发和Linux测试Python API时管理目录路径

3

我正在开发一个涉及Python Flask API的Python Web应用程序。我在Windows上进行开发,并使用Postman测试了所有API。一切正常。在我的Web应用程序项目中,如果某些目录不存在,我必须创建它们,因此我使用以下代码:

if not os.path.isdir("dataset/" + client_name):
    # if client name directory is not created, then create it
    client_dir = curr_path + '\\' + 'dataset\\' + client_name 
    os.mkdir(client_dir)

我正在将这个web应用程序部署在pythonanywhere.com上。Pythonanywhere使用Linux平台,而我使用Windows进行开发,因此会出现一些问题。在Windows中,我们使用\表示目录,但在Linux中,它使用/
我该如何在Windows上进行开发并在Linux上部署?是否可以定义某种配置来处理这个问题?
谢谢!

1
在您的代码中尽量避免使用斜杠。使用os.path.join(...)来创建路径将会适当地格式化给定系统的路径:https://docs.python.org/3.7/library/os.path.html#os.path.join - SyntaxVoid
@SyntaxVoid 你能举个例子吗? - S Andrew
2
@SyntaxVoid 有一种正确的方法。还有 os.path.sep。如果你从 pathlib import Path,那么 client_dir = Path.cwd() / 'dataset' / client_namepathlib 使用 / 作为连接运算符,但它根据你所在的平台正确地解释它。然后 client_dir.mkdir() - Steven Rumbalski
1
从你的代码中消除“/”和“\”。即使是“os.path.sep”通常也是不必要的:os.path.join和pathlib做得更好。在处理顶级考虑因素(如“/”与“C:”)时要小心。当可用时(在主文件中),“__file__”变量可能会有所帮助。记住你可以使用“..”向上爬。最后:**os.makedirs()**。 - JL Peyret
3个回答

5

你可以完全避免在代码中使用斜杠。使用os.path.join构建路径。在你发布的示例中,你只需要做的就是更改

client_dir = curr_path + '\\' + 'dataset\\' + client_name

to

client_dir = os.path.join(curr_path, "dataset", client_name)

编辑:您还应更改

if not os.path.isdir("dataset/" + client_name):

为了

if not os.path.isdir(os.path.join("dataset", client_name))

路径将会根据代码运行的系统而适当地构建。


os.path.join 在白天使用 Windows 平台,在夜晚使用 Linux 平台时,真是一款救命工具。 - jdpy19
我也鼓励使用 os.path.sep - Sven-Eric Krüger
os.path.join 在底层实现中使用了 os.sep - SyntaxVoid

1

你可以使用pathlib中的路径。

该模块提供了表示不同操作系统适当语义的文件系统路径的类。

from pathlib import Path

path = Path('dataset')/client_name

if not path.isdir():
    client_dir = Path(curr_path)/'dataset'/client_name
    client_dir.mkdir()

你能提供一个例子来说明这是如何解决问题的吗?否则它应该是一条注释。 - SyntaxVoid
@SyntaxVoid 是的,当然。 - kederrac

1
使用pathlib中的Path。在Windows上,PathWindowsPath的别名,在Linux/Unix上则是PosixPath的别名。这意味着当您使用斜杠运算符(/)时,它会根据平台正确解释。
from pathlib import Path

curr_path = Path.cwd() # or something else
client_dir = curr_path / 'dataset' / client_name

if not client_dir.is_dir():
    client_dir.mkdir()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接