2

一部の部分が欠落しているが、2 つのプロパティがあることが保証されている、一連の不完全な修飾パスがあるとします。

  1. 不完全パスと完全修飾パスの両方の最後の部分は完全に等しくなり、
  2. 不完全修飾パスの各部分の順序は、完全修飾パスの部分の実際の順序と一致します。

例えば、

p1 = '/foo/baz/myfile.txt'
p2 = '/bar/foo/myfile.txt'
actual = '/foo/bar/baz/myfile.txt'

この場合、p1は一致しp2ますが、実際のパスでbarは の後に出現するため、一致しませんfoo。簡単です:[actual.split('/').index(part) for part in p1.split('/')]順序付けられたリストになりますが、同じ理解でp2はありません。

しかし、パスに繰り返しがある場合はどうなりますか?

p1 = '/foo/bar/bar/myfile.txt'
p2 = '/bar/bar/baz/myfile.txt'
actual = '/foo/bar/baz/bar/myfile.txt'

p1一致するが一致しないことをどのように識別できますかp2(baz最初の の後にbar発生しますが、2 番目の後に発生しないため?

4

2 に答える 2

1
def match(path, actual):
    path = path.strip('/').split('/')
    actual = iter(actual.strip('/').split('/'))
    for pathitem in path:
        for item in actual:
            if pathitem == item:
                break
        else:
            # The for-loop never breaked, so pathitem was never found
            return False
    return True

q1 = '/foo/baz/myfile.txt'
q2 = '/bar/foo/myfile.txt'
p1 = '/foo/bar/bar/myfile.txt'
p2 = '/bar/bar/baz/myfile.txt'
actual = '/foo/bar/baz/bar/myfile.txt'

print(match(q1, actual))
# True

print(match(q2, actual))
# False

print(match(p1, actual))
# True

print(match(p2, actual))
# False
于 2013-09-24T17:45:25.773 に答える