我使用以下代码来提取tar文件:
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()但是,我想以目前正在提取哪些文件的形式来跟踪进度。我该怎么做呢?
额外的加分:是否有可能创建一个百分比的提取过程以及?我想用它为tkinter更新一个进度条。谢谢!
发布于 2010-09-08 22:51:22
文件进度和全局进度:
import io
import os
import tarfile
def get_file_progress_file_object_class(on_progress):
class FileProgressFileObject(tarfile.ExFileObject):
def read(self, size, *args):
on_progress(self.name, self.position, self.size)
return tarfile.ExFileObject.read(self, size, *args)
return FileProgressFileObject
class TestFileProgressFileObject(tarfile.ExFileObject):
def read(self, size, *args):
on_progress(self.name, self.position, self.size)
return tarfile.ExFileObject.read(self, size, *args)
class ProgressFileObject(io.FileIO):
def __init__(self, path, *args, **kwargs):
self._total_size = os.path.getsize(path)
io.FileIO.__init__(self, path, *args, **kwargs)
def read(self, size):
print("Overall process: %d of %d" %(self.tell(), self._total_size))
return io.FileIO.read(self, size)
def on_progress(filename, position, total_size):
print("%s: %d of %s" %(filename, position, total_size))
tarfile.TarFile.fileobject = get_file_progress_file_object_class(on_progress)
tar = tarfile.open(fileobj=ProgressFileObject("a.tgz"))
tar.extractall()
tar.close()发布于 2014-01-17 04:29:42
可以在extractall()中指定members参数
with tarfile.open(<path>, 'r') as tarball:
tarball.extractall(path=<some path>, members = track_progress(tarball))
def track_progress(members):
for member in members:
# this will be the current file being extracted
yield membermember是TarInfo对象,请参见所有可用函数和属性here
发布于 2018-11-21 11:56:38
您可以只使用tqdm()并打印正在提取的文件数的进度:
import tarfile
from tqdm import tqdm
# open your tar.gz file
with tarfile.open(name=path) as tar:
# Go over each member
for member in tqdm(iterable=tar.getmembers(), total=len(tar.getmembers())):
# Extract member
tar.extract(member=member)https://stackoverflow.com/questions/3667865
复制相似问题