如何将某个标签中的字符串更改为多个文件中的小写字母

问题描述 投票:0回答:1

我具有使用Python脚本在Windows 10中试图满足的以下要求:

  1. 递归地将多个文件夹中的所有文件名更改为小写。为此,我使用了以下代码:

    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)
    
  2. 更新这些嵌入特定标记的文件的引用。这里的标签是<img href=(filename.png)>。在这里,<img href=>是常数,文件名filename.png是不同的。

所以,这是示例:

现有文件名:

  • ABC.dita
  • XYZ.dita
  • IMG.PNG

这些在不同的文件中引用,例如IMG.PNG中引用了XYZ.dita

在第一步之后,这些更改如下:

  • abc.dita
  • xyz.dita
  • img.png

这将破坏包含在不同文件中的所有引用。

我想更新所有更改的文件名引用,以使链接保持不变。

我对Python和初学者没有任何经验。要实现第二步,我应该能够使用正则表达式并找到一种模式,说,

<img href="(this will be a link to the IMG.PNG>"。这将是.dita文件的一部分。

在步骤1之后,文件中的引用将中断。

如何更改文件名并保留其引用?这里的问题是,在所有文件中查找并用新名称替换旧名称。

感谢您的任何帮助。

python html-parsing lowercase
1个回答
0
投票

一旦有了引用文件的数据,就可以使用此代码来降低引用字符串:

s = """<tag1><tag2><img href="AFDDFD.ADF"></tag2><tag3><img href="SDGSFVSF.vsfv"></tag3></tag1>"""
start = 0
head = "<img href="
tail = ">"
while start != -1:
    head = "<img href="
    img_start = s.find(head, start)
    if img_start == -1:
        break
    img_end = s.find(">", img_start)
    s = s[:img_start] +s[img_start:img_end].lower() + s[img_end:]
    start = img_end

或者,您可以使用一些XML解析模块。例如BeautifulSoup,这将有助于避免类似href=href =

的问题
from bs4 import BeautifulSoup as bs

s = """<tag1><tag2><img href="AFDDFD.ADF"></tag2><tag3><img href="SDGSFVSF.vsfv"></tag3></tag1>"""
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)

两种方式都可以重写文件。

© www.soinside.com 2019 - 2024. All rights reserved.