[英]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.