Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环遍历CSS文件中的所有URL并替换_Python_Css_String_Url_Substring - Fatal编程技术网

Python循环遍历CSS文件中的所有URL并替换

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文件中找到所有相对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/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}