在文件夹内移动文件夹

问题描述

我有00ff命名的文件夹(全部为小写),其中也有随机数量文件夹。我只需要将文件夹内部移动到其他位置。

folders = list((range(256)))
for i in range(256):
    folders[i] = hex(folders[i])[2:4]
    if len(folders[i]) == 1:
        folders[i] = "0" + folders[i]
for i in range(len(folders)):
    shutil.move(f"D:\folders\{folders[i]\*}","D:\MainFolder")

我希望D:\folders\(00)中的所有文件都移入D:\Mainfolder并重复执行,直到所有文件都移入,但会引发错误

OSError: [Errno 22] Invalid argument: 'D:\\folders\\00\\*'

还有,有什么方法可以改善我制作阵列的方式吗?

解决方法

您需要将命令修复为: shutil.move(f"D:\folders\{folders[i]}\*","D:\MainFolder")

,

shutil.move希望获得一个明确的路径作为参数。似乎您对glob感到困惑,后者可能会使用类似shell的通配符。我假设使用*是要在该文件夹下移动任何内容,但这不是必需的。在the docs状态下:

递归 将文件或目录(src)移至另一个位置(dst)

(重点是我的)。


请注意,通过使用string formatting,您可以更轻松地获得folders列表:

folders = [f"{hex(i)[2:]:0>2}" for i in range(256)]

或者只是避免将此类列表保存在内存中,然后执行以下操作:

for i in range(256):
    shutil.move(f"D:\folders\{hex(i)[2:]:0>2}","D:\MainFolder")