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)
我必須說這是一個簡單的方法,假設你的文件不是很大,它會很好用。如果您有無法一次全部讀取到內存的大文件,或者有很多文件,您可能需要考慮避免讀取所有文件數據的方法。
添加回答
舉報