Python 3.x Python中的多任务、重新格式化和移动

Python 3.x Python中的多任务、重新格式化和移动,python-3.x,multitasking,Python 3.x,Multitasking,我有很多文件夹。我想制作.zip格式的文件并将其移动到另一个目录: for (dir, dirs, files) in os.walk(directory): for filename in files: # make zip files if filename.endswith(".zip"): # move created zip files os.re

我有很多文件夹。我想制作.zip格式的文件并将其移动到另一个目录:

    for (dir, dirs, files) in os.walk(directory):
        for filename in files:
             # make zip files
             if filename.endswith(".zip"):
                # move created zip files
                os.rename(dir + '/' + filename, new + '/' + directory + '/' + filename)

问题是,在生成zip文件后,程序找不到创建的具有zip扩展名的文件。我想创建zip格式并将其移动到另一个文件夹。

您可以使用shutil库:

import shutil
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move(src、dst)

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

如果目标是一个现有目录,那么src将被移动到内部 那个目录。如果目标已存在,但不是 目录,它可能会被覆盖,具体取决于os.rename()语义

如果目标位于当前文件系统上,则os.rename()为 用过。否则,src将被复制(使用shutil.copy2())到dst,然后 删除


您还可以将shutil用于存档文件:

shutil.make_archive(基本名称,格式[,根目录[,基本目录[, 详细的[,干运行[,所有者[,组[,记录器]]].[]]

创建存档 文件(如zip或tar)并返回其名称


欲了解更多信息,请阅读

我已编辑了我的问题。我的问题是,当我有这么多文件时,os.walk(目录)读取的是旧文件,而不是新创建的文件。@然后,一旦更改了文件名,在再次运行os.walk之前,您将看不到更改。一旦传递了os.walk的代码行,就得到了结果。为了查看更改,您需要再次调用os.walk,这样您将得到新的结果。在循环的迭代过程中,不可能看到更改。@然后,即使看到,在iterable上循环并在循环中更新Ierable也不是一个好的做法。但是您有什么建议?批量更新,然后批量移动?(这是我以前做的)@TheNone,如果你有很多文件,批量是一个不错的选择。如果只有很少的,你可以一次做所有的事情。