查找字符串是否为路径

问题描述 投票:0回答:4

我正在用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('.'):]
。但这并不普遍且不酷。所以我正在寻找更好的算法或解决方案。

python string path substring
4个回答
0
投票

如果你没有已知的选项列表,我认为你不可能拥有 100% 可靠的算法。

如果我们进行一些合理的猜测,我可以想到这样的事情:

  • 如果不以-开头,则是一条路径
  • 如果它以 - 开头,删除第一个字母并在其余部分使用 os.path.exists ,如果它返回 true 那么你就有了路径
  • 重复上面的操作,直到找到非字母数字字符

出现这种情况的一些情况:

  • 我们确实有一个路径,但它不存在于文件系统中
  • 我们可能会吃掉驱动器号,并检查路径是否存在于错误的驱动器上
  • if 选项可以包含非字母数字字符
  • 参数为当前目录下的文件或文件夹

0
投票

是的,我认为您需要的工具是列表切片机制

我们初始化一个字符串:

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/

希望有帮助:)


0
投票

使用我创建的这个函数:

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'
。只需向函数发送任何这些字符串,它就应该可以工作。祝你好运!在评论中提问。


0
投票

这样的事情可以吗?

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) 
© www.soinside.com 2019 - 2024. All rights reserved.