问题描述
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
/Users/Joe/Some/Path/To/Folder/
好吧,我可以使用正则表达式和/或字符串操作来做到这一点,我希望可以使用标准库中的某些东西,尤其是在某些系统上使用正斜杠而其他情况下获得平台无关的情况。他们是反斜杠。
有什么想法吗?
解决方法
用于处理路径的规范工具是pathlib
和低级os.path
标准库。尽管习惯于使用/
路径分隔符的UNIX约定,但两者都以平台无关的方式处理路径。 pathlib
通过显式使用pathlib.PosixPath
/ pathlib.PurePosixPath
或pathlib.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'))