我有一个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
它