【问题标题】:How to move an entire directory if a file with certain extension is found in that directory using python?如果使用 python 在该目录中找到具有特定扩展名的文件,如何移动整个目录?
【发布时间】:2017-08-26 11:25:26
【问题描述】:

大家好,我是 python 的新手,而且堆栈溢出,所以如果我问一个愚蠢的问题,我很抱歉。

这就是我想要做的,我的电脑中有很多游戏放在随机文件夹中,例如:一个游戏在 G:\test1\folder1\gamename 另一个游戏在G:\test1\folder2\gamename 等。我要做的是使用 os.walk 扫描整个 G:\test1 目录> 如果 .exe 文件存在于任何文件夹中,我希望将存在该 .exe 文件的整个树(使用该文件夹的名称)移动到 G:\test1\Games 目录。我使用 shutil.copytree () 来执行此操作,它工作正常,但我没有在目标中获取游戏名称文件夹

Ex : 如果源目录是 G:\test1\limbo 目标目录是 G:\test1\games 我将所有内容复制到文件夹 G:\test1\games\[这里]。但我希望内容转到 G:\test1\games\limbo\[这里]

import os, shutil
src = "G:\\test1"
dst = src+"\\games"
os.chdir(src)

for i, j, k in os.walk(src):
    for h in k:
        if h.endswith(".exe"):
            shutil.copytree(i, dst)

提前致谢

【问题讨论】:

  • 你能贴一些你正在执行写操作的源代码吗?
  • 我已经更新了,请检查
  • @ChandreshGS 你的代码引发了NameError
  • 尝试在您的dst 中的games 末尾添加另一个\
  • 您的示例中仍有很多错误。导入前的空格,大写 I 而不是更明智的不要混用的东西,字母 l 而不是大写 I,chdir() 在这个例子中是完全没有必要的,无论如何也不会被导入。它必须是 os.chdir(src)。此外,您错过了 if 块的中断。如果您不退出循环,则将与遇到的每个 .exe 一起复制相同的目录。那么,如果一个游戏有 5 个 exe 呢?

标签: python python-3.x


【解决方案1】:

在复制之前,您必须获取文件夹的名称并在 G:\test1 中创建它。或者如果你想按照你说的移动目录,可以使用 shutil.move() 。

for dirpath, dirnames, filenames in os.walk(src):
    if any((fn.lower().endswith(".exe") for fn in filenames)):
        shutil.move(dirpath, dst)
        # Or:
        # os.makedirs(os.path.join(dst, os.path.basename(dirpath)))
        # shutil.copytree(dirpath, os.path.join(dst, os.path.basename(dirpath)))

【讨论】:

  • 谢谢兄弟会努力让你知道
  • 获取文件存在错误(winerror 183)当文件已存在时无法创建文件
  • 当然不能。你期待什么?首先清空你的 G:\test1 。至于重复项,您可以使用 try-except 块或使用 os.path.exists() 提前检查来处理它们或忽略它们。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多