2

与朋友共享文件时遇到此问题...

我有windows,有些使用mac,有些使用Linux。当我共享包含创建目录命令的 python 文件时,例如:

Path_Results = os.path.dirname(Path_Definition)+'\Results'

该目录未创建,因为在 Windows 中使用了 \,而在 mac 和 linux 中使用了 /。任何想法如何创建更通用的脚本?

提前致谢

4

3 回答 3

4

使用pathlib.Path. 然后你就会停止关心/自己\

在 Windows 上:

>>> from pathlib import Path
>>> updir = Path("..")
>>> resdir = updir / "Result"
>>> resdir
WindowsPath('../Result')
>>> str(resdir)
'..\\Result'

在 Linux、Mac、BSD 和其他 *nix 上:

>>> from pathlib import Path
>>> updir = Path("..")
>>> resdir = updir / "Result"
>>> resdir
PosixPath('../Result')
>>> str(resdir)
'../Result'

几乎所有的 stdlib 模块和函数都Path按原样接受,不需要str()它。例子:

from pathlib import Path
resdir = Path("../Result")
filepath = resdir / "somefilename.txt"
assert isinstance(filepath, Path)
with open(filepath, "rt") as fin:
    for ln in fin:
        # do things

如果有文件..\Result\somefilename.txt(在 Windows 中)或../Result/somefilename.txt(在 Linux/Mac/BSD 中),代码的工作方式完全相同。


编辑:对于您的特定代码:

from pathlib import Path

...

# Assuming `Path_Definition` is not a Path object
Path_Results = Path(Path_Definition) / 'Results'
于 2020-11-25T10:15:30.410 回答
3

os.sep存在就是为了这个目的。您也可以使用os.path.join.

于 2020-11-25T09:53:38.113 回答
0

直接使用 '/' 或 '' 不是一个好主意。@mrks 提到的路径分隔符是我们需要使用的。

于 2020-11-25T09:57:58.010 回答