路径尾部的斜杠是这样的:在应用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