【问题标题】:Moving folders inside of folders在文件夹内移动文件夹
【发布时间】:2020-09-18 15:13:14
【问题描述】:

我有从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\\*'

另外,有什么方法可以改进我制作数组的方式吗?

【问题讨论】:

  • 这不是显式文件夹路径吗?它确实在我输入时将 00 识别为自动完成,所以我认为这很好,只是星号似乎导致了问题

标签: python python-3.x shutil


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我修复了这个问题,但仍然抛出错误,我猜它无法识别 ' * '?
    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2012-05-03
    • 2021-08-02
    相关资源
    最近更新 更多