在 Python 中'normalize'目录路径的最有效方法是什么?



长期使用C#和Swift,但对Python很陌生,所以如果这是一个基本问题,请原谅我。

我正试图解决一个看似简单的问题。我们有一个Python3函数,它接受一个以字符串数组表示的目录列表。我们在一些输出的JSON中使用这些值,在该JSON中,它必须具有有保证的格式。

我们试图解决的是以下情况(注意:这将在macOS或Linux上进行(:

File 1: /Users/Joe/Some/Path/To/Folder/
File 2: /Users/Joe/Some/Path/To/Folder   <-- Note the missing trailing slash
File 3: ~/Some/Path/To/Folder/           <-- Note the 'home' tilde

以上三个都应该输出与上面的文件1匹配的格式。。。

/Users/Joe/Some/Path/To/Folder/

我可以用正则表达式和/或字符串操作来做到这一点,我希望在标准库中有一些东西可以使用,尤其是为了获得平台独立性,在一些系统上,它们是前斜杠,而在另一些系统上则是后斜杠。

有什么想法吗?

处理路径的规范工具是pathlib和低级os.path标准库。两者都以独立于平台的方式处理路径,尽管通常使用/路径分隔符的UNIX约定。pathlib通过显式使用pathlib.PosixPath/pathlib.PurePosixPathpathlib.WindowsPath/pathlib.PureWindowsPath来额外支持平台特定行为;CCD_ 9变体可以跨平台使用。


使用pathlib可以显式地.expanduser(),也可以选择.resolve()—给定逻辑或实际文件系统操作。pathlib.Path总是删除尾部分隔符;如果需要尾部分隔符(例如,指示目录或链接处理(,则必须显式添加。

import random
import pathlib
raw_path = random.choice(['/Users/Joe/Some/Path/To/Folder/', '/Users/Joe/Some/Path/To/Folder', '~/Some/Path/To/Folder/'])
path = pathlib.Path(raw_path).expanduser().resolve()  # normalize path
rawdir_path = str(path/'-')[:-1]                      # format with trailing separator
print(rawdir_path)

相关内容

  • 没有找到相关文章