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()