我有一个字符串变量,它代表一个dos路径,例如:
var = “d:\stuff\morestuff\Furtherdown\THEFILE.txt”
我想把这个字符串分成:
[ “d”, “stuff”, “morestuff”, “Furtherdown”, “THEFILE.txt” ]
我尝试过使用split()和replace(),但它们要么只处理第一个反斜杠,要么将十六进制数字插入字符串。
我需要以某种方式将这个字符串变量转换为原始字符串,以便我可以解析它。
最好的方法是什么?
我还应该添加,var的内容,即我试图解析的路径,实际上是一个命令行查询的返回值。这不是我自己生成的路径数据。它存储在一个文件中,命令行工具不会转义反斜杠。
from os import path as os_path
然后
def split_path_iter(string, lst):
head, tail = os_path.split(string)
if head == '':
return [string] + lst
else:
return split_path_iter(head, [tail] + lst)
def split_path(string):
return split_path_iter(string, [])
或者,受以上答案启发(更优雅):
def split_path(string):
head, tail = os_path.split(string)
if head == '':
return [string]
else:
return split_path(head) + [tail]
这对我来说很管用:
>>> a=r"d:\stuff\morestuff\furtherdown\THEFILE.txt"
>>> a.split("\\")
['d:', 'stuff', 'morestuff', 'furtherdown', 'THEFILE.txt']
当然,您可能还需要从第一个组件中剥离冒号,但保留它可以重新组装路径。
r修饰符将字符串字面量标记为“raw”;注意嵌入的反斜杠是如何不加倍的。
from os import path as os_path
然后
def split_path_iter(string, lst):
head, tail = os_path.split(string)
if head == '':
return [string] + lst
else:
return split_path_iter(head, [tail] + lst)
def split_path(string):
return split_path_iter(string, [])
或者,受以上答案启发(更优雅):
def split_path(string):
head, tail = os_path.split(string)
if head == '':
return [string]
else:
return split_path(head) + [tail]
我使用下面的代码,因为它使用os.path.basename函数,它不会向返回的列表添加任何斜杠。它也适用于任何平台的斜杠:即窗口的\\\\或unix的/。此外,它不会添加windows用于服务器路径的\\\\\\\\:)
def SplitPath( split_path ):
pathSplit_lst = []
while os.path.basename(split_path):
pathSplit_lst.append( os.path.basename(split_path) )
split_path = os.path.dirname(split_path)
pathSplit_lst.reverse()
return pathSplit_lst
所以对于:
\\\\\\\server\\\\folder1\\\\folder2\\\\folder3\\\\folder4
你会得到:
['server','folder1','folder2','folder3','folder4']