2014-03-27 32 views
0

替換文件的Windows路徑我有一個文件,下面的文字:搜索和使用python

C:\ Program Files文件\ MyApp的\

我想分析我的文件,並替換爲文本:

d:\ NewDest \

我用下面的代碼,但我不能代替,因爲反斜線的文本 - 沒有一個反斜槓任何文字工作正常。我該怎麼辦?

import os, fnmatch 
import fileinput, glob, string, sys, os 
from os.path import join 
import os 
import re 
import sys 
def searchreplace(path,search,replace,exts=None): 

    import fileinput, glob, string, sys, os 
    from os.path import join 
    # replace a string in multiple files 
    #filesearch.py 

    files = glob.glob(path + "/*") 
    if files is not []: 
     for file in files: 
      if os.path.isfile(file): 
       if exts is None or exts.count(os.path.splitext(file)[1]) is not 0: 
        print file 
        for line in fileinput.input(file): 
         line = re.sub(search,replace, line.rstrip()) 
         print(line) 

searchreplace('D:\Test', 'C:\Program Files\MyApp\', 'D:\NewDest\', '*.csproj') 
+0

是 「C:\ Program Files文件\ MyApp的\」,在文本文件中的唯一的事情,還是有更多的東西? –

+0

是的,文件中還有很多其他的東西,它是一個Visual Studio .csproj文件 – pogorman

回答

2

您需要在您的路徑中將\替換爲\\
\\\\爲您的正則表達式中的每個\

import os, fnmatch 
import fileinput, glob, string, sys, os 
from os.path import join 
import os 
import re 
import sys 
def searchreplace(path,search,replace,exts=None): 

    import fileinput, glob, string, sys, os 
    from os.path import join 
    # replace a string in multiple files 
    #filesearch.py 

    files = glob.glob(path + "/*") 
    if files is not []: 
    for file in files: 
     if os.path.isfile(file): 
     if exts is None or exts.count(os.path.splitext(file)[1]) is not 0: 
      print file 
      for line in fileinput.input(file): 
      line = re.sub(search,replace, line.rstrip()) 
      print(line) 

searchreplace('D:\\Test', 'C:\\\\Program Files\\\\MyApp\\\\', 'D:\\\\NewDest\\\\', '*.txt') 

編號:Can't escape the backslash with regex?

+0

這很有效,雖然文件搜索路徑很好 - 'D:\ Test' – pogorman

0

一個反斜槓考慮逃避序列。

>>> a ="\" 
    File "<stdin>", line 1 
    a ="\" 
     ^
SyntaxError: EOL while scanning string literal 
>>> a ="\\" 

您可以使用雙斜線.Windows允許雙斜線( 「C:\ Program Files文件\ MyApp的\」, 「d:\ NewDest \」)。

0

嘗試使用'D:\\ Test'或r'D:\ Test'而不是'D:\ Test'使反斜槓成爲文字。所有字符串都一樣。