Объедините два пути с общей папкой


2 принят

Я думаю, вы должны сделать это вручную, я не думаю, что os.path реализует эту функцию.

Возможно, попробуйте что-то вроде:

def combine_with_duplicate(root, rel_path):
    rs = root.split("/")
    rps = rel_path.split("/")
    popped = False
    for v in rs:
        if v == rps[0]:
            rps.pop(0)
            popped = True
        elif popped:
            break

    return "/".join(rs+rps)


print(combine_with_duplicate('/home/user/test', 'test/files/file.txt'))
# /home/user/test/files/file.txt
print(combine_with_duplicate('/home/user', 'test/files/file.txt'))
# /home/user/test/files/file.txt
print(combine_with_duplicate('/home/user/test', 'user/test/files/file.txt'))
# /home/user/test/files/file.txt

0

Вы можете использовать os.path.join:

import os

root = '/home/user/test'

rel_path = 'test/files/file.txt'

head, tail = os.path.split(root)
final = os.path.join(head, rel_path)

print(final)
#  /home/user/test/files/file.txt 

0

Вы можете попробовать:

>>> import os
>>> root = '/home/user/test'
>>> rel_path = 'test/files/file.txt'
>>> os.path.join(root, '../', rel_path)
'/home/user/test/../test/files/file.txt'

Или это, в случае, если root и rel_path не имеют «перекрывающихся» частей:

>>> os.path.join(root, '../' if root.split('/')[-1] == rel_path.split('/')[0] else '' , rel_path)
'/home/user/test/../test/files/file.txt'
>>> root =  '/home/user/test/files'
>>> os.path.join(root, '../' if root.split('/')[-1] == rel_path.split('/')[0] else '' , rel_path)
'/home/user/test/files/test/files/file.txt'
питон,

python,

1

Ответов: 3


2 принят

Я думаю, вы должны сделать это вручную, я не думаю, что os.path реализует эту функцию.

Возможно, попробуйте что-то вроде:

def combine_with_duplicate(root, rel_path):
    rs = root.split("/")
    rps = rel_path.split("/")
    popped = False
    for v in rs:
        if v == rps[0]:
            rps.pop(0)
            popped = True
        elif popped:
            break

    return "/".join(rs+rps)


print(combine_with_duplicate('/home/user/test', 'test/files/file.txt'))
# /home/user/test/files/file.txt
print(combine_with_duplicate('/home/user', 'test/files/file.txt'))
# /home/user/test/files/file.txt
print(combine_with_duplicate('/home/user/test', 'user/test/files/file.txt'))
# /home/user/test/files/file.txt

0

Вы можете использовать os.path.join:

import os

root = '/home/user/test'

rel_path = 'test/files/file.txt'

head, tail = os.path.split(root)
final = os.path.join(head, rel_path)

print(final)
#  /home/user/test/files/file.txt 

0

Вы можете попробовать:

>>> import os
>>> root = '/home/user/test'
>>> rel_path = 'test/files/file.txt'
>>> os.path.join(root, '../', rel_path)
'/home/user/test/../test/files/file.txt'

Или это, в случае, если root и rel_path не имеют «перекрывающихся» частей:

>>> os.path.join(root, '../' if root.split('/')[-1] == rel_path.split('/')[0] else '' , rel_path)
'/home/user/test/../test/files/file.txt'
>>> root =  '/home/user/test/files'
>>> os.path.join(root, '../' if root.split('/')[-1] == rel_path.split('/')[0] else '' , rel_path)
'/home/user/test/files/test/files/file.txt'
питон,
Похожие вопросы