【发布时间】:2020-09-24 11:21:20
【问题描述】:
如何将r'C:\Users\usern\Documents\file.txt' 之类的路径转换为['C:', 'Users', 'usern', 'Documents', 'file.txt'] 之类的列表?我希望它在 Windows 上跨平台工作,无论路径是使用正斜杠还是反斜杠还是两者的混合,也不管输入字符串是否以斜杠结尾(即,没有空字符串末尾的输入,如'C:\\Users\\usern\\Documents\\')。
据我所知,以下内容应该适用于 Windows、Mac 和 Linux:
import sys
def path_to_list(s):
if sys.platform == 'win32':
return s.replace('\\', '/').rstrip('/').split('/')
else:
return s.rstrip('/').split('/')
但我不确定这是否适用于可以运行 Python 的其他平台,也不知道此解决方案是否非常适合这些常见平台。
至少在以下情况下可能会出现问题:
- 如果某些平台允许空字符串作为文件名或文件夹名,
- 如果存在不允许在文件名中使用反斜杠的 Windows 以外的平台
- 如果存在任何平台不允许允许正斜杠(
/)作为文件夹分隔符 - 如果存在任何平台,允许使用反斜杠 (
\) 或正斜杠 (/) 以外的字符作为文件夹分隔符
但我不确定是否存在这样的平台,如果存在,Python 是否甚至可以在它们上运行(如果不存在则不会引起问题)?
顺便说一句,您不能使用if '\\' in __file__: ...(作为代码块中if sys.platform == 'win32' 的替代品)来检查是否允许使用反斜杠,因为出于某种原因,__file__ 返回带有正斜杠的当前脚本的路径即使在 Windows 上。即使不是这种情况,这也可能不是一个好方法。
【问题讨论】:
-
您应该使用
os.sep并查看os.path.split
标签: python python-3.x path cross-platform