在Python中“规范化”目录路径的最有效方法是什么?

问题描述

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支持平台特定的行为; Pure...变体可以跨平台使用。


使用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) always removes trailing separators;如果需要结尾分隔符(例如表示目录或链接处理),请it must be added explicitly

gender = list(c('m','f','m','f'))
names = list(c('Peter','Peter','Anna','Peter'))