我有一個包含各種子目錄的檔案夾,其中包含具有不同擴展名的檔案,例如 .jpg、.png 等。我只想提取 .jpg 檔案并對它們執行一些作業,例如裁剪等,然后我想要將這些新檔案(即裁剪的檔案)保存到它們來自的子目錄中。但是,我不希望將這些新檔案保存到它們來自的同一檔案夾中。相反,我希望將它們保存到一個不同的檔案夾中,該檔案夾包含它們來自的所有具有相同名稱的相同子目錄。這個新檔案夾必須只包含新的裁剪檔案。我在下面添加了一個插圖,以更好地解釋我的問題。

我嘗試了以下方法:
for imgs in glob.iglob(self.Main_Folder '//**/*.jpg', recursive=True):
Output_Folder = os.path.join(os.path.dirname(imgs), "cropped" str(idx) ".jpg")
但是,這會覆寫位于主檔案夾子目錄中的 .jpg 檔案(即覆寫 1.jpg、2.jpg 等)。對此的任何幫助將不勝感激!
uj5u.com熱心網友回復:
要意識到的一件事是,glob.iglob生成的路徑包括整個匹配模式,其中包括您的self.Main_Folder. 因此,您必須首先確定相對于主檔案夾的子路徑,并將其與輸出檔案夾連接。例如"main_folder/found/path.jpg"-> "found/path.jpg"-> "output_folder/found/path.jpg"。該pathlib庫提供了一種使用Path.relative_to.
import glob
import os
import pathlib
main_folder = "somewhere/Main Folder"
output_folder = "somewhere/Output Folder"
for name in glob.iglob(os.path.join(main_folder, "**/*")):
path = pathlib.Path(name)
sub_path = path.relative_to(main_folder)
output_path = os.path.join(output_folder, sub_path)
print(output_path)
你可以通過使用更多的pathlibAPI(尤其是使用 連接路徑的能力/)變得更漂亮,但這是否更清楚可能值得商榷:
main_folder = "somewhere/Main Folder"
output_folder = "somewhere/Output Folder"
for name in glob.iglob(str(main_folder / "**/*")):
path = pathlib.Path(name)
output_path = output_folder / path.relative_to(main_folder)
print(output_path)
在撰寫本文時是最新的 Python 版本的 Python 3.10 中,這可能更簡單:
main_folder = pathlib.Path("scratch")
output_folder = pathlib.Path("output")
for name in glob.iglob("**/*", root_dir=main_folder):
output_path = output_folder / name
print(output_path)
uj5u.com熱心網友回復:
基本上,這是3個問題
- 用于查找 jpg 檔案的 iglob
- 用于影像處理的枕頭
- 一種創建新 jpg 檔案路徑的機制
首先你已經有了,第二個是微不足道的,第三個是這樣的:
from pathlib import Path
apath = Path(“a/b/c/a.jpg”) # to your jpg
root = “a/b”
new_dir = Path(“some/path”)
new_path = new_dir.joinpath(apath.relative_to(root))
# should be some/path/c/a.jpg
這里沒有python,所以沒有測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405882.html
標籤:
