判断字符串是否为路径

2 投票
4 回答
9227 浏览
提问于 2025-04-17 21:13

我正在使用Python编程,遇到一个问题。我有几个字符串,需要找出哪些部分看起来像路径,然后把真正的路径进行标准化。
比如,我有几个不同的字符串,如下所示:
1. ..\..\..\Workspace
2. C:\source\Workspace
3. -B..\..\source
4. -build..\..\work\source..\workspace
5. -HD:\abc\bds\Workspace
基本上,有些字符串直接就是路径,而有些字符串后面带有一个“-”符号。选项字符串的长度是可变的。
在上面的例子中,字符串3、4、5分别包含了带有选项“-B”、“-build”、“-H”的路径字符串。
我的问题是,如何从这些例子中判断字符串的哪一部分是路径,哪一部分不是。因为选项不是固定的,所以我不能仅仅检查字符串的开头来判断预设的选项。
唯一的办法是从“..”开始,或者从某个字符之前开始截取子字符串,比如“C:”或“D:”。

所以,我想问有没有一种通用的方法来做到这一点,或者Python是否提供了什么函数,可以从特定位置开始截取字符串的一部分?

任何能满足上述5个例子的答案都可以,即使有点过于具体。

我目前用于例子2和5的代码是:path = path[path.find(':')-1:],而对于其他的字符串则是path = path[path.find('.'):]。但这并不通用,也不太好。所以我在寻找一个更好的算法或解决方案。

4 个回答

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) 
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

没错,我觉得你需要了解的是列表切片的用法。

我们先来初始化一个字符串:

string = "a/b/c/d"

如果我们想要获取两个元素,可以这样做:

sub_string = string[:2]

如果我们想要获取最后两个元素,可以这样使用:

sub_string = string[-2:]

想了解更多关于列表切片的内容,可以查看这个链接:http://www.pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/

希望这对你有帮助 :)

1

如果你没有一个已知的选项列表,我觉得你不可能有一个百分之百可靠的算法。

如果我们做一些合理的猜测,我可以想到以下几种方法:

  • 如果字符串不以 - 开头,那它就是一个路径。
  • 如果以 - 开头,去掉第一个字母,然后用 os.path.exists 检查剩下的部分,如果返回 true,那就是一个路径。
  • 重复以上步骤,直到遇到非字母数字的字符为止。

有一些情况可能会导致这个方法失效:

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

撰写回答