长期使用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.PurePosixPath
或pathlib.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)