路徑尾部的斜槓是這樣的:在應用re.sub
CLOUD_PATH = os.path.join(HOME, 'library', 'data')
WORKDIR = os.getcwd()
然後在腳本中,我有一個函數:
def urlchanger(src, dst):
xmlsdir = os.path.join(src, 'Plugins', '_xmls', '')
xmlfiles = [ f for f in os.listdir(xmlsdir) if re.match(r'^.*\.xml', f)]
for file in xmlfiles:
with open(os.path.join(xmlsdir, file), 'r+') as f:
indata = f.read()
if ('dontchange.me' in indata):
outdata = re.sub(r'http://dontchange.me/', dst, indata)
print 'Updating file %s:\n \n%s' % (os.path.join(xmlsdir, file), outdata)
with open((os.path.join(os.environ['TEMP'], file)), 'w') as n:
n.write(outdata)
與所謂:
urlchanger(WORKDIR, CLOUD_PATH)
問題是, re.sub
在data
目錄(來自out-file的結果)後執行不帶斜槓的替換:
plugin assemblyUrl="C:\library\dataSomefile.dll"
之間data
和Somefile
- dataSomefile
。
我嘗試添加''
到CLOUD_PATH
,如:
CLOUD_PATH = os.path.join(HOME, 'library', 'data', '')
但得到了一個錯誤:
...
raise error, v # invalid expression
sre_constants.error: bogus escape (end of line)
而同樣爲一些其他的嘗試......
附:腳本從源文件中讀取數據,查找dontchange.me
,用給定的URL替換它,並寫入新的新文件。 Python 2.7。
'if('dontchange.me'in c for indata)''沒有做你想做的事。它創建一個生成器,然後測試它的布爾值,它是_always true_。你是否指「如果有(相同的生成器表達式)'?另外,看起來'indata'是一個字符串,所以'c'將會是一個字符,所以表達式在第一個地方沒什麼意義... –
我認爲'dst'也被認爲是一個正則表達式,所以如果你在窗口中,並且在那裏有\等路徑分隔符,它們將在正則表達式中被解釋。你可以傳遞一個callable,只是返回'dst'。但是請顯示更完整的代碼示例! –
@tobias_k是的,你是對的:-)'在c爲c in indata'從以前的編碼(我嘗試'readlines'第一,哪個返回列表')。謝謝你的提示。 – setevoy