1 回答

TA贡献1874条经验 获得超12个赞
我假设您有一个包含所有相关文件的文件夹。所以问题分为两部分:
在文件上循环运行
对于每个文件,降低参考
循环播放文件
这可以使用glob
或来完成os.walk
。
import os
upper_directory = "[insert your directory]"
for dirpath, directories, files in os.walk(upper_directory):
for fname in files:
path = os.path.join(dirpath, fname)
lower_file_references(path)
小写 参考文献
当您拥有文件的路径时,您需要从中读取数据:
with open(path) as f:
s = f.read()
获得引用文件的数据后,您可以使用此代码来降低引用字符串:
head = "<img href="
tail = ">"
img_start = s.find(head, start)
while img_start != -1:
img_end = s.find(">", img_start)
s = s[:img_start] +s[img_start:img_end].lower() + s[img_end:]
img_start = img_end
或者,您可以使用一些 XML 解析模块。例如 BeautifulSoup,这将有助于避免像href=vshref =
from bs4 import BeautifulSoup as bs
s = bs(s)
imgs = s.find_all("img")
for i in imgs:
if "href" in i.attrs:
i.attrs["href"] = i.attrs["href"].lower()
s = str(s)
然后,您可以通过这两种方式重写文件。你可以这样做:
with open(path, "w") as f:
f.write(s)
把它们放在一起
import os
from bs4 import BeautifulSoup as bs
def lower_file_references(file_path):
with open(path) as f:
s = f.read()
s = bs(s)
imgs = s.find_all("img")
for i in imgs:
if "href" in i.attrs:
i.attrs["href"] = i.attrs["href"].lower()
s = str(s)
with open(path, "w") as f:
f.write(s)
upper_directory = "[insert your directory]"
for dirpath, directories, files in os.walk(upper_directory):
for fname in files:
path = os.path.join(dirpath, fname)
lower_file_references(path)
我必须说这是一个简单的方法,假设你的文件不是很大,它会很好用。如果您有无法一次全部读取到内存的大文件,或者有很多文件,您可能需要考虑避免读取所有文件数据的方法。
添加回答
举报