替换路径的一部分 - python

时间:2014-12-02 20:52:01

标签: python replace path

有没有快速的方法来替换python中的部分路径?

例如:

old_path='/abc/dfg/ghi/f.txt'

我不知道路径的开头(/abc/dfg/),所以我真的想告诉python保留/ghi/之后的所有内容(包括)并替换/ghi/之前的所有内容{1}} /jkl/mno/

>>> new_path
    '/jkl/mno/ghi/f.txt/'

4 个答案:

答案 0 :(得分:9)

如果您使用的是Python 3.4+,或者愿意安装backport,请考虑使用pathlib代替os.path

path = pathlib.Path(old_path)
index = p.parts.index('ghi')
new_path = pathlib.Path('/jkl/mno').joinpath(*p.parts[index:])

如果您只想坚持使用2.7或3.3 stdlib,那么没有直接方法可以做到这一点,但是您可以通过循环{{1}来获得等效的parts }。例如,保留每个路径组件,直到找到第一个os.path.split,然后添加新的前缀,将替换最后一个ghi之前的所有内容(如果要在之前替换所有内容) ghi,改变事情并不难:

ghi

这有点笨拙,所以您可能要考虑编写一个简单的函数,为您提供路径组件的列表或元组,这样您就可以使用path = old_path new_path = '' while True: path, base = os.path.split(path) new_path = os.path.join(base, new_path) if base == 'ghi': break new_path = os.path.join('/jkl/mno', new_path) ,然后将它们全部重新组合在一起,如使用find版本。

答案 1 :(得分:5)

>>> import os.path
>>> old_path='/abc/dfg/ghi/f.txt'

首先使用os.path.relpath

从您选择的起始目录中获取相对路径
>>> rel = os.path.relpath(old_path, '/abc/dfg/')
>>> rel
'ghi\\f.txt'

然后使用os.path.join

将路径的新第一部分添加到此相对路径
>>> new_path = os.path.join('jkl\mno', rel)
>>> new_path
'jkl\\mno\\ghi\\f.txt'

答案 2 :(得分:1)

您可以使用ghi的索引:

old_path.replace(old_path[:old_path.index("ghi")],"/jkl/mno/")
In [4]: old_path.replace(old_path[:old_path.index("ghi")],"/jkl/mno/" )
Out[4]: '/jkl/mno/ghi/f.txt'

答案 3 :(得分:0)

一种相当幼稚的方法,但是做的是:

功能:

def replace_path(path, frm, to):
    pre, match, post = s.rpartition(frm)
    return ''.join((to if match else pre, match, post))

示例:

>>> replace_path(s, '/ghi/', '/jkl/mno')
'/jkl/mno/ghi/f.txt'
>>> replace_path(s, '/whatever/', '/jkl/mno')
'/abc/dfg/ghi/f.txt'