第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何獲得解壓縮大型 bz2 文件所需的時(shí)間?

如何獲得解壓縮大型 bz2 文件所需的時(shí)間?

手掌心 2021-11-02 19:16:32
我需要使用 Python 處理大型 bz2 文件(~6G),方法是使用BZ2File.readline(). 問題是我想知道處理整個(gè)文件需要多少時(shí)間。我做了很多搜索,試圖獲得解壓文件的實(shí)際大小,以便我可以知道即時(shí)處理的百分比,以及剩余的時(shí)間,而發(fā)現(xiàn)似乎不可能知道解壓文件的大小無需先解壓縮除了解壓縮文件需要大量內(nèi)存之外,解壓縮本身也需要很多時(shí)間。那么,有人可以幫助我即時(shí)獲得剩余的處理時(shí)間嗎?
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

您可以估計(jì)剩余基礎(chǔ)上的時(shí)間消耗的壓縮而不是數(shù)據(jù),生產(chǎn)的未壓縮數(shù)據(jù)。如果數(shù)據(jù)相對(duì)同質(zhì),結(jié)果將大致相同。(如果不是,那么無論如何使用輸入或輸出都不會(huì)給出準(zhǔn)確的估計(jì)。)


您可以輕松找到壓縮文件的大小,并使用到目前為止在壓縮數(shù)據(jù)上花費(fèi)的時(shí)間來估計(jì)處理剩余壓縮數(shù)據(jù)的時(shí)間。


下面是一個(gè)簡單的例子,使用BZ2Decompress對(duì)象一次對(duì)輸入一個(gè)塊進(jìn)行操作,顯示讀取進(jìn)度(Python 3,從命令行獲取文件名):


# Decompress a bzip2 file, showing progress based on consumed input.


import sys

import os

import bz2

import time


def proc(input):

    """Decompress and process a piece of a compressed stream"""

    dat = dec.decompress(input)

    got = len(dat)

    if got != 0:    # 0 is common -- waiting for a bzip2 block

        # process dat here

        pass

    return got


# Get the size of the compressed bzip2 file.

path = sys.argv[1]

size = os.path.getsize(path)


# Decompress CHUNK bytes at a time.

CHUNK = 16384

totin = 0

totout = 0

prev = -1

dec = bz2.BZ2Decompressor()

start = time.time()

with open(path, 'rb') as f:

    for chunk in iter(lambda: f.read(CHUNK), b''):

        # feed chunk to decompressor

        got = proc(chunk)


        # handle case of concatenated bz2 streams

        if dec.eof:

            rem = dec.unused_data

            dec = bz2.BZ2Decompressor()

            got += proc(rem)


        # show progress

        totin += len(chunk)

        totout += got

        if got != 0:    # only if a bzip2 block emitted

            frac = round(1000 * totin / size)

            if frac != prev:

                left = (size / totin - 1) * (time.time() - start)

                print(f'\r{frac / 10:.1f}% (~{left:.1f}s left) ', end='')

                prev = frac


# Show the resulting size.

print(end='\r')

print(totout, 'uncompressed bytes')


查看完整回答
反對(duì) 回復(fù) 2021-11-02
?
慕森卡

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊

在另一個(gè)答案的幫助下,我終于找到了解決方案。該想法是使用處理,壓縮文件的總大小的壓縮文件的大小,并將其用于估計(jì)的剩余時(shí)間的時(shí)間。為達(dá)到這個(gè),

  1. 將壓縮文件作為字節(jié)對(duì)象讀入內(nèi)存:byte_data,速度相當(dāng)快

  2. 計(jì)算byte_data使用的大小total_size = len(byte_data)

  3. 包裝byte_databyte_f = io.BytesIO(byte_data)

  4. 包裝byte_fbz2f = bz2.BZ2File(byte_f)

  5. 在處理過程中,使用pos = byte_f.tell()獲取壓縮文件中的當(dāng)前位置

  6. 計(jì)算處理的確切百分比 percent = pos/total_size

  7. 記錄使用時(shí)間,并計(jì)算剩余時(shí)間

幾秒鐘后,估計(jì)會(huì)變得非常準(zhǔn)確:

0.01% processed, 2.00s elapsed, 17514.27s remaining...

0.02% processed, 4.00s elapsed, 20167.48s remaining...

0.03% processed, 6.00s elapsed, 21239.60s remaining...

0.04% processed, 8.00s elapsed, 21818.91s remaining...

0.05% processed, 10.00s elapsed, 22180.76s remaining...

0.05% processed, 12.00s elapsed, 22427.78s remaining...

0.06% processed, 14.00s elapsed, 22661.80s remaining...

0.07% processed, 16.00s elapsed, 22840.45s remaining...

0.08% processed, 18.00s elapsed, 22937.07s remaining...

....

99.97% processed, 22704.28s elapsed, 6.27s remaining...

99.98% processed, 22706.28s elapsed, 4.40s remaining...

99.99% processed, 22708.28s elapsed, 2.45s remaining...

100.00% processed, 22710.28s elapsed, 0.54s remaining...


查看完整回答
反對(duì) 回復(fù) 2021-11-02
  • 3 回答
  • 0 關(guān)注
  • 311 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)