问题描述
我有从00
到ff
命名的文件夹(全部为小写),其中也有随机数量的文件夹。我只需要将文件夹内部移动到其他位置。
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")