遍历css文件中的url并使用python替换文本



所以我已经在这个问题上工作了好几天了,但似乎不能把我的头围绕答案。基本上,我试图迭代一个css文件,并追加到文件内的所有url。例如,url('/css/main.css')会被url('/user/css/main.css)取代。这应该适用于所有的url或路径,不管引号。

使用file.replace(),我发现我替换了该字符串的所有实例,即使它发生多次导致双重替换。因此,我尝试做的是从列表的开头删除所有重复项。

if file.endswith(".css"):
css = open(os.path.join(root, file), 'r+')
urls = re.findall(r'url((.*?))', css.read())
css.seek(0)
filez = str(css.read())
urls = [i.replace('"', '').replace(''', '') for i in urls]
urlz = list(dict.fromkeys(urls))
for url in urlz:
if url[0] == '/':
url = '' + url[1:]
url2 = "/user/" + url
filez = filez.replace(url, url2)
else:
url = url
with open(os.path.join(root, file), 'wb') as file:
file.write(filez.encode(encoding='UTF-8'))

打印url列表(urlz)给出

['/fonts/LeagueGothic-Regular.ttf', 
'/fonts/Inter-Black.ttf', 'Inter-Black.ttf', 
'/fonts/Inter-ExtraLight.ttf']

上面的列表很好,但我如何让代码区分'Inter-Black.ttf''/fonts/Inter-Black.ttf'?到目前为止,代码在两者上迭代替换两次。

我输出:

@font-face {
font-family: 'Goth';
src: url('/user/fonts/LeagueGothic-Regular.ttf');
}
@font-face {
font-family: 'Inter';
src: url('/user/fonts//user/Inter-Black.ttf');

}

@font-face {
font-family: 'Inter';
src: url(/user/Inter-Black.ttf);

}

My Desired Output:

@font-face {
font-family: 'Goth';
src: url('/user/fonts/LeagueGothic-Regular.ttf');
}
@font-face {
font-family: 'Inter';
src: url('/user/fonts/Inter-Black.ttf');

}

@font-face {
font-family: 'Inter';
src: url(/user/Inter-Black.ttf);

}

我如何在一个文件中迭代url列表并追加到它,而不使用replace()方法?由于上述问题,我觉得replace方法不适合我。

如果我清楚地理解问题是正则表达式和分隔'/'斜杠和引号'"'。如果将模式划分为组以分离有问题的字符,则可以从组中构建新的字符串并在其中包含所需的内容。试试这样做:

if file.endswith(".css"):
css = open(os.path.join(root, file), 'r+').read()
t1 = re.sub(r'(('?(.*/)?)(.*..*)'?)', r'(2/user/4/5)', css)
with open(os.path.join(root, file), 'wb') as file:
file.write(t1.encode(encoding='UTF-8'))

,在那里你可以看到组(2,4,5)我使用在构建新的字符串:Pytex页面与您的CSS示例和我的regex

最新更新