Home > OS >  Python - Possibly Regex - How to replace part of a filepath with another filepath based on a match?
Python - Possibly Regex - How to replace part of a filepath with another filepath based on a match?

Time:08-12

I'm new to Python and relatively new to programming. I'm trying to replace part of a file path with a different file path. If possible, I'd like to avoid regex as I don't know it. If not, I understand.

I want an item in the Python list [] before the word PROGRAM to be replaced with the 'replaceWith' variable.

How would you go about doing this?

Current Python List []

item1ToReplace1 = \\server\drive\BusinessFolder\PROGRAM\New\new.vb
item1ToReplace2 = \\server\drive\BusinessFolder\PROGRAM\old\old.vb

Variable to replace part of the Python list path

replaceWith = 'C:\ProgramFiles\Microsoft\PROGRAM'

Desired results for Python List []:

item1ToReplace1 = C:\ProgramFiles\Micosoft\PROGRAM\New\new.vb
item1ToReplace2 = C:\ProgramFiles\Micosoft\PROGRAM\old\old.vb

Thank you for your help.

CodePudding user response:

The following code does what you ask, note I updated your '' to '\', you probably need to account for the backslash in your code since it is used as an escape character in python.

import os

item1ToReplace1 = '\\server\\drive\\BusinessFolder\\PROGRAM\\New\\new.vb'
item1ToReplace2 = '\\server\\drive\\BusinessFolder\\PROGRAM\\old\\old.vb'
replaceWith = 'C:\ProgramFiles\Microsoft\PROGRAM'
keyword = "PROGRAM\\"

def replacer(rp, s, kw):
    ss = s.split(kw,1)
    if (len(ss) > 1): 
        tail = ss[1]
        return os.path.join(rp, tail)
    else:
        return ""

print(replacer(replaceWith, item1ToReplace1, keyword))
print(replacer(replaceWith, item1ToReplace2, keyword))

The code splits on your keyword and puts that on the back of the string you want.

If your keyword is not in the string, your result will be an empty string.

Result:

C:\ProgramFiles\Microsoft\PROGRAM\New\new.vb
C:\ProgramFiles\Microsoft\PROGRAM\old\old.vb

CodePudding user response:

One way would be:

item_ls = item1ToReplace1.split("\\")
idx = item_ls.index("PROGRAM")
result = ["C:", "ProgramFiles", "Micosoft"]   item_ls[idx:]
result = "\\".join(result)

Resulting in:

>>> item1ToReplace1 = r"\\server\drive\BusinessFolder\PROGRAM\New\new.vb"
...  # the above
>>> result
'C:\ProgramFiles\Micosoft\PROGRAM\New\new.vb'

Note the use of r"..." in order to avoid needing to have to 'escape the escape characters' of your input (i.e. the \). Also that the join/split requires you to escape these characters with a double backslash.

  • Related