os.rename()

时间:2017-05-08 19:47:29

标签: python python-2.7

我有一个for循环,它通过一个目录工作,并从该目录中的每个.tar.gz内提取文件。它将每个.tar.gz中的内容提取到为每个.tar.gz创建的临时目录,然后重命名它们,以便将它们移动到最终目录。

为每个.tar.gz创建临时目录,以便只处理每个文件中的文件。重命名完成后,临时目录将被删除,仅在下一个.tar.gz时再次进行。

每个.tar.gz包含3个文件。这是一种保证,而不是假设。

发生的事情是在重命名后,经过检查我可能会发现自己的1-4个文件在最终目录中很短。例如,如果我从250个.tar.gz文件开始,我应该有750个最终文件,但我可能只有746个。由于最终文件被重命名,以便它们与原始.tar.gz匹配,我可以返回手动解压缩以成功检索3个文件。

需要发现为什么os.rename()方法正在做的事情。

当前代码:

def unzip(in_dir):

    final_dir = os.path.abspath(os.path.join(in_dir, "UNZIPPED\\"))
    temp_dir = os.path.join(in_dir, "TEMP\\")

    os.mkdir(final_dir)

    files = [f for f in os.listdir(in_dir) if f.endswith('.tar.gz')]

    for item in files:
        os.mkdir(temp_dir)
        org_path = os.path.abspath(os.path.join(in_dir, item))
        tar = tarfile.open(org_path, 'r:gz')
        tar.extractall(path=temp_dir)
        tar.close()
        for member in os.listdir(temp_dir):
            new_path= os.path.abspath(os.path.join(temp_dir, member))
            os.rename(new_path, 
                      os.path.join(final_dir,
                                   os.path.basename(org_path)[:-7]+new_path[-4:]))
        os.rmdir(temp_dir)

如果我误用os.path.abspath和/或os.path.join,请指出。我认为通过将in_dir作为C:\MyPath之类的内容传递,然后使用os.path.join(in_dir, "UNZIPPED\\")会产生C:\MyPath\UNZIPPED\,我之前不需要使用os.path.abspath

0 个答案:

没有答案