簡體   English   中英

根據xml個節點復制並重命名圖片

[英]Copy and rename pictures based on xml nodes

我正在嘗試將所有圖片從一個目錄(也包括子目錄)復制到另一個目標目錄。 每當在 xml 文件之一中找到確切的圖片名稱時,該工具應抓取所有信息(父節點和子節點中的屬性)並根據這些節點信息創建子目錄,它還應該重命名圖片文件。 從節點中提取所有信息的部分已經完成。

from bs4 import BeautifulSoup as bs

path_xml = r"path\file.xml"

content = []

with open(res, "r") as file:
    content = file.readlines()

content = "".join(content)

def get_filename(_content):
    bs_content = bs(_content, "html.parser")

    # some code
    
    picture_path = f'{pm_1}{pm_2}\{pm_3}\{pm_4}\{pm_5}_{pm_6}_{pm_7}\{pm_8}\{pm_9}.jpg'

get_filename(content)

所以最后我得到了一個字符串值,其中包含我想要的目錄路徑和文件名。

現在我很難打開一個目錄中的所有 xml 個文件,而不是只打開一個文件。 我試過這個:

import os
dir_xml = r"path"

res = []

for path in os.listdir(dir_xml):
    if os.path.isfile(os.path.join(dir_xml, path)):
        res.append(path)

with open(res, "r") as file:
    content = file.readlines()

但它給了我這個錯誤: TypeError: expected str, bytes or os.PathLike object, not list

我怎樣才能通讀所有 xml 個文件而不是一個? 我有數百個 xml 文件,所以需要花點時間:D

還有一個問題:如何根據字符串創建目錄?

假設picture_path的值為AB\C\D\E_F_G\H\I.jpg

我需要另一個目錄路徑作為創建文件夾的目的地,以及一個 function 以某種方式基於該字符串創建文件夾。 我怎樣才能做到這一點?

您可以使用os.walk()遞歸搜索文件:

import os

dir_xml = r"path"

for root, dirs, files in os.walk(dir_xml):  #topdown=False
    for names in files:
        if ".xml" in names:
            print(f"file path: {root}\n XML-Files: {names}")
            with open(names, 'r') as file:
                content = file.readlines()

要讀取一個目錄下的所有XML個文件,可以修改你的代碼如下:

import os
dir_xml = r"path"

for path in os.listdir(dir_xml):
    if path.endswith(".xml"):
        with open(os.path.join(dir_xml, path), "r") as file:
            content = file.readlines()
        content = "".join(content)
        get_filename(content)

此代碼使用 os.listdir() function 獲取 dir_xml 指定目錄中所有文件的列表。 然后它使用 for 循環遍歷文件列表,檢查每個文件是否以 .xml 擴展名結尾。 如果是,它會打開文件,讀取其內容,並將其傳遞給 get_filename function。

要基於字符串創建目錄,可以使用 os.makedirs function。例如:

import os

picture_path = r'AB\C\D\E_F_G\H\I.jpg'
 dest_path = r'path_to_destination'

os.makedirs(os.path.join(dest_path, os.path.dirname(picture_path)), exist_ok=True)

在這段代碼中,os.path.join 用於將 dest_path 和 picture_path 的目錄部分合並為一個完整路徑。 os.path.dirname 用於提取 picture_path 的目錄部分。 然后使用 os.makedirs function 創建路徑指定的目錄,並將 exist_ok 參數設置為 True 以允許 function 成功,即使目錄已經存在。

最后可以使用shutil庫將圖片文件復制到目的地並重命名,像這樣:

import shutil

src_file = os.path.join(src_path,  picture_path)
dst_file = os.path.join(dest_path, picture_path)

shutil.copy(src_file, dst_file)

這里,src_file 是源圖片文件的完整路徑,dst_file 是目標文件的完整路徑。 然后使用 shutil.copy function 將文件從源復制到目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM