亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在多個文件中將某個標簽中的字符串更改為小寫

如何在多個文件中將某個標簽中的字符串更改為小寫

慕萊塢森 2022-10-25 15:56:22
我有以下要求,我試圖在 Windows 10 中使用 Python 腳本來滿足:遞歸地將多個文件夾中的所有文件名更改為小寫。為此,我使用了以下代碼:import os path = "C://Users//shilpa//Desktop//content"for dir,subdir,listfilename in os.walk(path):    for filename in listfilename:           new_filename = filename.lower()         src = os.path.join(dir, filename)          dst = os.path.join(dir, new_filename)          os.rename(src,dst)更新嵌入在特定標簽中的這些文件的引用。這里的標簽是 <img href=(filename.png)>。在這里,<img href=>是常量并且文件名 filename.png 是不同的。所以,這里是一個例子:現有文件名:ABC.ditaXYZ.ditaIMG.PNG這些在不同的文件中 IMG.PNG被引用,比如說在XYZ.dita.在 step1 之后,這些更改如下:abc.ditaxyz.ditaimg.png這將破壞不同文件中包含的所有引用。我想更新所有更改的文件名引用,以便鏈接保持不變。我對 Python 沒有任何經驗,而且只是初學者。為了實現第 2 步,我應該能夠使用正則表達式并找到一個模式,比如說,<img href="(this will be a link to the IMG.PNG>". 這將是.dita文件的一部分。step1 之后,文件中的引用將中斷。如何更改文件名并保留其引用?這里的問題是,在所有文件中查找并用新名稱替換舊名稱。任何幫助表示贊賞。
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

我假設您有一個包含所有相關文件的文件夾。所以問題分為兩部分:

  1. 在文件上循環運行

  2. 對于每個文件,降低參考

循環播放文件

這可以使用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)

我必須說這是一個簡單的方法,假設你的文件不是很大,它會很好用。如果您有無法一次全部讀取到內存的大文件,或者有很多文件,您可能需要考慮避免讀取所有文件數據的方法。


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號