【问题标题】:How to know if a file is being compressed如何知道文件是否被压缩
【发布时间】:2018-05-16 16:09:57
【问题描述】:

我正在从一组文件中创建一个 tar 文件,并从 tar 文件中创建一个 tar.gz 文件(使用 python)。

压缩文件的创建可能需要一些时间,所以:

我想知道是否有办法知道“创建压缩文件的过程”是“正在进行的”。

也许通过一些临时文件或类似文件进行检查?

谢谢

【问题讨论】:

  • 你可以直接用tarfile库创建一个tar.gz:docs.python.org/3/library/tarfile.html
  • 那么,您在磁盘上有一些foo.tar.gz 文件,但您不确定它是否仍然打开并且压缩阶段是否仍在进行中?
  • @tdelaney 对,假设一个压缩文件需要 5 分钟才能完成,我如何检查该过程是否仍在进行中
  • 我不知道这样做的干净方法。在 Windows 上,您可能会遇到共享冲突。压缩成临时文件很常见,但这完全取决于实现。如果您控制压缩器的实施......这样做,那么它很容易。只需等待重命名的文件(poll 或 inotify 之类的)。
  • 你可以在压缩的输出流上使用块写入,这样你就可以打印一个进度了

标签: python compression tar gzip


【解决方案1】:

您可以使用 python 创建您的gzip 文件(可能在另一个线程中),这样您就可以知道文件的创建时间(甚至获得进度指示器)

写入块和进度报告,因为每次将文件的块写入压缩输出时您都可以控制(那里有更漂亮的进度条,我会做一个简单的打印):

import gzip,shutil,os

input_file = "input.tar"
input_size = os.path.getsize(input_file)
chunk_size = 100000
written = 0

with open(input_file,"rb") as fr,gzip.open(input_file+".gz","wb") as fw:
    chunk = fr.read(chunk_size)
    fw.write(chunk)
    written += chunk.size()
    print("Progress {} bytes out of {}".format(written,input_size))

另一种解决方案是使用 tarfile 库的 gzip 输出模式,并在正在写入/待写入的文件上使用进度条(知道如果文件的大小非常不同,这将不准确)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多