有没有办法在Python中复制之前迭代文件夹中的每个文件?

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

必须复制 X 文件夹中带有 .png 扩展名的每张图片,与 Excel 中的值进行比较,并根据条件粘贴到不同的文件夹 Y。这是我的两个问题,

  1. 我的脚本正在复制文件夹 X 中的所有图像并粘贴到 Y。有没有办法迭代文件夹 X 中的每个图像并根据 if 条件粘贴到 Y 文件夹。

  2. 有没有办法比较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: 是我的代码,不适用于我的第二个问题。

Excel表格: excel sheet sample image

python excel copy openpyxl shutil
1个回答
0
投票

我会这样做:

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")
© www.soinside.com 2019 - 2024. All rights reserved.