Python循环遍历CSS文件中的所有URL并替换
我试图在css文件中找到所有相对url,并用绝对url替换它们。我知道如何获取绝对路径,但首先我需要找到文件中url()的所有实例,然后获取相对路径并将其替换为绝对路径。这是我到目前为止试过的 鉴于我的Css是:Python循环遍历CSS文件中的所有URL并替换,python,css,string,url,substring,Python,Css,String,Url,Substring,我试图在css文件中找到所有相对url,并用绝对url替换它们。我知道如何获取绝对路径,但首先我需要找到文件中url()的所有实例,然后获取相对路径并将其替换为绝对路径。这是我到目前为止试过的 鉴于我的Css是: css= "background:url(/pub-assets/img/index/sec8-bg.png) src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') background-image:url('../img/index/
css= "background:url(/pub-assets/img/index/sec8-bg.png)
src:url('../fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('../img/index/blok1-bg.jpg')"
我正在尝试以下代码:
start = "url("
end = ")"
print css[css.find(start)+len(start):css.rfind(end)]
但是它没有返回url,而是返回css代码。
有人能帮我吗。非常感谢的任何建议这将打印每个URL,假设字符串中没有任何多余的括号:
start = "url("
end = ")"
txt = css
start_pos = txt.find(start)
while start_pos >= 0:
end_pos = txt.find(end)
print(txt[start_pos+len(start):end_pos])
txt = txt[end_pos+len(end):]
start_pos = txt.find(start)
这将打印每个URL,假设字符串中没有任何多余的括号:
start = "url("
end = ")"
txt = css
start_pos = txt.find(start)
while start_pos >= 0:
end_pos = txt.find(end)
print(txt[start_pos+len(start):end_pos])
txt = txt[end_pos+len(end):]
start_pos = txt.find(start)
使用正则表达式,例如:
重新导入
// ? = 非贪婪
结果=重新搜索(“url\(.+?\)”,css)
打印结果。组()
使用正则表达式,例如:
重新导入
// ? = 非贪婪
结果=重新搜索(“url\(.+?\)”,css)
打印结果。组()
使用正则表达式,您可以轻松列出每个URL。就像这样:
import re
css= "background:url(/pub-assets/img/index/sec8-bg.png) \n src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') \n background-image:url('../img/index/blok1-bg.jpg')"
re.findall(r'url\((.*?)\)', css)
输出:
如果需要索引,可以使用findIter而不是findall:
输出
使用正则表达式,您可以轻松列出每个URL。就像这样:
import re
css= "background:url(/pub-assets/img/index/sec8-bg.png) \n src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') \n background-image:url('../img/index/blok1-bg.jpg')"
re.findall(r'url\((.*?)\)', css)
输出:
如果需要索引,可以使用findIter而不是findall:
输出
您也可以这样做: 1) 我稍微修改了正则表达式,因此它也不会获取文字图像,比如“url(data:image/png..”,它本身就是一个图像,因此没有外部加载。此外,一些网站不使用引号(“”)来包装url,因为它也可以不使用,所以我也在正则表达式中添加了这些可选内容 2) 然后,我将从生成的列表中删除重复项,这是在下一部分替换URL时需要的 3) 最后,我将遍历需要替换为绝对URL的URL列表,并使用urljoin()函数实现这一点。 这还会将所有链接解析为正确的格式,即使它们来自更高一级,如“./images/someimg.png” 4) 最后,您得到了修改后的CSS,其中所有URL都是绝对的:) 哪个输出此:
background:url(https://www.example.nl/pub-assets/img/index/sec8-bg.png)
src:url('https://www.example.nl/static/bundles/fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('https://www.example.nl/static/bundles/img/index/blok1-bg.jpg')
.grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}
您也可以这样做: 1) 我稍微修改了正则表达式,因此它也不会获取文字图像,比如“url(data:image/png..”,它本身就是一个图像,因此没有外部加载。此外,一些网站不使用引号(“”)来包装url,因为它也可以不使用,所以我也在正则表达式中添加了这些可选内容 2) 然后,我将从生成的列表中删除重复项,这是在下一部分替换URL时需要的 3) 最后,我将遍历需要替换为绝对URL的URL列表,并使用urljoin()函数实现这一点。 这还会将所有链接解析为正确的格式,即使它们来自更高一级,如“./images/someimg.png” 4) 最后,您得到了修改后的CSS,其中所有URL都是绝对的:) 哪个输出此:
background:url(https://www.example.nl/pub-assets/img/index/sec8-bg.png)
src:url('https://www.example.nl/static/bundles/fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('https://www.example.nl/static/bundles/img/index/blok1-bg.jpg')
.grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}
此字符串中有3个URL;您要求查找第一个的开始和最后一个的结束。我需要获取介于url()之间的url。我有一个巨大的css文件,这是我的url结构的一个例子。你正在一次阅读整个文件,你应该逐行阅读,而不是在这个字符串中有3个url;您要求查找第一个的开始和最后一个的结束。我需要获取介于url()之间的url。我有一个巨大的css文件,这是我的url结构的一个例子。你正在一次阅读整个文件,你应该逐行阅读,而不是逐行阅读谢谢。这个答案也是正确的,我更喜欢@pensfute answer。我也更喜欢它。谢谢。这个答案也是正确的,因为我更喜欢@pensfute answer。我也更喜欢它。
background:url(https://www.example.nl/pub-assets/img/index/sec8-bg.png)
src:url('https://www.example.nl/static/bundles/fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('https://www.example.nl/static/bundles/img/index/blok1-bg.jpg')
.grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}