首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python tarfile进度输出?

Python tarfile进度输出?
EN

Stack Overflow用户
提问于 2010-09-08 20:48:23
回答 7查看 9.6K关注 0票数 15

我使用以下代码来提取tar文件:

代码语言:javascript
复制
import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()

但是,我想以目前正在提取哪些文件的形式来跟踪进度。我该怎么做呢?

额外的加分:是否有可能创建一个百分比的提取过程以及?我想用它为tkinter更新一个进度条。谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-09-08 22:51:22

文件进度和全局进度:

代码语言:javascript
复制
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()
票数 11
EN

Stack Overflow用户

发布于 2014-01-17 04:29:42

可以在extractall()中指定members参数

代码语言:javascript
复制
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 member

memberTarInfo对象,请参见所有可用函数和属性here

票数 5
EN

Stack Overflow用户

发布于 2018-11-21 11:56:38

您可以只使用tqdm()并打印正在提取的文件数的进度:

代码语言:javascript
复制
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)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3667865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档