我正在用Python工作。我的问题是我有几个字符串,我必须检测它们的哪一部分看起来像路径,然后规范化那些实际路径。
例如我有几个不同的字符串,如下所示:
1. ..\..\..\工作区
2. C:\源\工作区
3. -B..\..\源
4. -构建..\..\工作\源..\工作空间
5. -HD: bc ds\工作区
基本上,有些字符串是直接的路径,有些字符串附加了一个尾随 - 。选项字符串的长度是可变的。
在上面的示例中,字符串 3、4、5 分别包含预先附加了选项 -B、-build、-H 的路径字符串。
问题是如何从上面的例子中检测出字符串的哪一部分是路径,哪一部分不是路径。这些选项不是固定的,所以我不能只检查给定字符串的头部是否有预先指定的选项。
前进的唯一方法是获取从 .. 或 : 之前的一个字符开始的子字符串(例如 C: 或 D:)。
所以问题是有没有通用的方法可以做到这一点,或者Python是否提供任何函数来从任何特定位置开始截取字符串的截断部分?
任何满足以上 5 个示例的答案都很酷,尽管它有点过拟合。
我当前使用的代码,例如2和5是:
path = path[path.find(':')-1:]
对于其他人来说则是path = path[path.find('.'):]
。但这并不普遍且不酷。所以我正在寻找更好的算法或解决方案。
如果你没有已知的选项列表,我认为你不可能拥有 100% 可靠的算法。
如果我们进行一些合理的猜测,我可以想到这样的事情:
出现这种情况的一些情况:
是的,我认为您需要的工具是列表切片机制
我们初始化一个字符串:
string = "a/b/c/d"
如果我们想访问例如 first 两个元素,那么我们会这样做:
sub_string = string[:2]
如果我们想访问 last 两个元素,那么我们将使用:
sub_string = string[-2:]
有关列表切片的更多信息http://www.pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/
希望有帮助:)
使用我创建的这个函数:
import os
string_1 = 'adsflk;ajewqpfoiewjqfpowijapfeiojC:\Python27'
def parse_path(string):
count = 0
while True:
count += 1
new_string = string.split(string[:count], 1)
if os.path.exists(new_string[1]):
return new_string
break
使用
parse_path
运行 string_1
函数会返回 'C:\Python27'
。只需向函数发送任何这些字符串,它就应该可以工作。祝你好运!在评论中提问。
这样的事情可以吗?
import os
possibles = [
"..\..\..\Workspace",
"C:\source\Workspace",
"-B..\..\source",
"-build..\..\work\source..\workspace",
"-HD:\abc\bds\Workspace "
]
paths = []
for p in possibles:
if p[0] == '-':
if ':' in p:
p = p[p.index(':')-1:]
else:
cut = 2
while not os.path.exists(p) and p:
p = p[cut:]
cut+=1
if p: paths.append(p)