Python tarfile progress output?

前端 未结 6 989
旧巷少年郎
旧巷少年郎 2021-02-07 10:41

I\'m using the following code to extract a tar file:

import tarfile
tar = tarfile.open(\"sample.tar.gz\")
tar.extractall()
tar.close()

However,

6条回答
  •  情深已故
    2021-02-07 11:01

    Both file-progress and global progress:

    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()
    

提交回复
热议问题