必须复制 X 文件夹中带有 .png 扩展名的每张图片,与 Excel 中的值进行比较,并根据条件粘贴到不同的文件夹 Y。这是我的两个问题,
我的脚本正在复制文件夹 X 中的所有图像并粘贴到 Y。有没有办法迭代文件夹 X 中的每个图像并根据 if 条件粘贴到 Y 文件夹。
有没有办法比较Excel中的2列,例如:Excel有A列'1.jpeg'和B列作为字母'B',IF 1.JPEG = B然后复制文件1.jpeg并放入b文件夹,如果1.peg = C,则复制1.jpeg并放入C文件夹等
这是我当前的代码,
source = r"C:\\Users\\Downloads\\From\\"
> destination_B = r"C:\\Users\\Downloads\\From\\Groups\\B"
> destination_C = r"C:\\Users\\Downloads\\From\\Groups\\C"
>
>
> inputExcelFile = "Script.xlsx"
>
> newWorkbook = openpyxl.load_workbook(inputExcelFile)
>
> firstWorksheet = newWorkbook\["Sheet1"\]
>
> extensionList = ("jpg", "png")
>
> GroupName_b = "B"
> GroupName_c = "C"
>
> for imageName in os.listdir(source):
if imageName.endswith(extensionList):
> for column_data1 in firstWorksheet\["A"\]:
> x = column_data1.value
> for column_data2 in firstWorksheet\["B"\]:
> y = column_data2.value
> if GroupName_c == y and imageName == x:
> shutil.copy(imageName, destination_C)
> else:
> print("Failed")
这里shutil.copy(imageName,destination_C)复制了整个文件夹图像,而不是检查excel中的条件,并且仅当A列中的1.png = B列中的字母“B”时才复制。
这里 if GroupName_c == y and imageName == x: 是我的代码,不适用于我的第二个问题。
我会这样做:
import shutil
from openpyxl import load_workbook
d = dict(load_workbook("Script.xlsx")["Sheet1"].values)
for img, dst in d.items():
shutil.copy(source / img, source / "Groups" / dst / img)
结果:
From
┣━━ 33_67013_7961.png
┣━━ 38_62468_5866.jpg
┣━━ 39_12945_1208.png
┣━━ 49_99346_6890.jpg
┣━━ 55_41444_3350.png
┣━━ 56_68334_4267.jpg
┣━━ 60_73375_1649.png
┣━━ 64_18254_4617.jpg
┣━━ 70_01840_1528.png
┣━━ 96_12429_4104.jpg
┣━━ Groups
┃ ┣━━ B
┃ ┃ ┣━━ 39_12945_1208.png
┃ ┃ ┣━━ 49_99346_6890.jpg
┃ ┃ ┣━━ 55_41444_3350.png
┃ ┃ ┣━━ 56_68334_4267.jpg
┃ ┃ ┣━━ 60_73375_1649.png
┃ ┃ ┣━━ 64_18254_4617.jpg
┃ ┃ ┗━━ 70_01840_1528.png
┃ ┗━━ C
┃ ┣━━ 33_67013_7961.png
┃ ┣━━ 38_62468_5866.jpg
┃ ┗━━ 96_12429_4104.jpg
┗━━ Script.xlsx
使用的配置:
from pathlib import Path
subs = ["B", "C"]
source = Path("From")
for s in subs:
(source / "Groups" / s).mkdir(parents=True)
import random
random.seed(0)
images = [
f"{random.randint(0, 99):02}_{random.randint(0, 99999):05}"
f"_{random.randint(0, 9999):04}.{random.choice(['jpg', 'png'])}"
for _ in range(10)
]
for i in images:
with open(source / i, "w") as f:
pass
from openpyxl import Workbook
wb = Workbook()
wb.title = "Sheet1"
for i in images:
wb["Sheet1"].append([i, random.choice(subs)])
wb.save("Script.xlsx")