python将A文件夹下的 类型为.MP4文件(122个) 随机移动到 B文件夹下的每个子文件夹(122个) 每个文件夹分到1个文件,并报告是否成功

python将A文件夹下的 类型为.MP4文件(122个)
随机移动到 B文件夹下的每个子文件夹(122个)
每个文件夹分到1个文件,并报告是否成功
A文件夹 有 122个MP4文件
B文件夹 有 122个子文件夹


import os
from random import shuffle
import shutil

def move_from_A_to_B(A, B):
    files = os.listdir(A)
    mp4s = []
    for f in files:
        if f.endswith('.MP4') or f.endswith('.mp4'):
            mp4s.append(f)
    
    dirs = os.listdir(B)
    indices = [i for i in range(len(dirs))]
    shuffle(indices)
    print("mp4数目:{},B目录子目录数:{}".format(len(mp4s), len(dirs)))
    if(len(mp4s) == len(dirs)):
        for i,mp4 in enumerate(mp4s):
            old_path = os.path.join(A, mp4)
            new_path = os.path.join(os.path.join(B, dirs[indices[i]]), mp4)
            try:
                shutil.move(old_path, new_path)
                print("移动文件{}到{}成功".format(old_path, new_path))
            except:
                print("移动文件{}到{}失败".format(old_path, new_path))
    else:
        print("mp4数目和B目录子目录数不同")


A = "D:\\A" # 修改成A目录
B = "D:\\B" # 修改成B目录
move_from_A_to_B(A, B)

B文件夹下的每个子文件夹已经建好了对吧

python的OS库 可以完成 比如os.walk
先获取A的绝对路径后在获取B的绝对路径
对A 直接获取整个文件夹内的所有文件 遍历你得到的列表,把mp4格式的目标文件放到新列表,把文件名和路径合起来就是这个文件的对应的绝对路径
对B 获取所有已经有的文件夹列表,这里你可以对比一下搜集到的mp4文件数量和文件夹数量是不是一样,然后就是移动过去并且用os在确认一下 B绝对路径+子文件夹路径+mp4 的这个路径是不是存在就可以获得返回


import shutil
import os
import random


# 获取移动目标文件夹的120个子文件夹
def get_target_dir(target: str) -> list:
    arr = []
    for i in os.listdir(target):
        if os.path.isdir(target + "\\" + i):
            arr.append(target + "\\" + i)
    return arr


# 获取mp4文件的路径
def find_mp4_file_path(target: str) -> list:
    arr = []
    for i in os.listdir(target):
        if ".mp4" in i:
            arr.append(target + "\\" + i)
    return arr


def remove_file(old_path: str, new_path: str) -> None:
    shutil.copy(old_path, new_path)


def main():
    target_mp4 = input("输入含有mp4文件的文件夹绝对路径:")
    target_dir = input("输入含有120个文件夹的文件夹绝对路径:")
    dir_arr = get_target_dir(target_dir)
    mp4_arr = find_mp4_file_path(target_mp4)
    index_arr_mp4 = [i for i in range(len(mp4_arr))]
    index_arr_dir = [i for i in range(len(dir_arr))]
    while index_arr_dir and index_arr_mp4:
        try:
            index_mp4 = random.sample(index_arr_mp4, 1)[0]
            index_arr_mp4.remove(index_mp4)
            index_dir = random.sample(index_arr_dir, 1)[0]
            index_arr_dir.remove(index_dir)
            remove_file(mp4_arr[index_mp4], dir_arr[index_dir])
        except:
            print("每一个文件夹已经分到了一个mp4文件")
    print("转移完成")


if __name__ == '__main__':
    main()