Re: [python] progress bar na stahovanie velkeho suboru z githubu

2018-05-08 Tema obsahu ZdPo Ster
Vdaka pomohlo :-)

On Tue, 8 May 2018 at 15:26, Michal Molhanec  wrote:

> Ahoj,
>
> zkusil bych si říct přímo o binární data:
>
> req = requests.get(file_url, allow_redirects=True, stream=True,
> headers={"Accept": "application/vnd.github.v3.raw"})
> Viz https://developer.github.com/v3/git/blobs/#custom-media-types
>
> S requests ani GITem ale nedělám.
> Nicméně tohle mi jsem v rychlosti otestoval a fungovalo mi
>
> Zdraví
> Michal
>
> Dne 08.05.2018 v 11:01 ZdPo Ster napsal(a):
>
> Ahojte,
>
> viem stiahnut velky subor z z githubu takto:
>
> file_content = requests.get(file_url, allow_redirects=True)
> file_data = base64.b64decode(file_content.content)
> open(output, 'wb').write(file_data)
>
> Kedze to dlho trva, chcem tam implementovat progressbar a tu zacinaju moje
> problemy ;-). Nasiel som ze by malo fungovat nieco taketo:
>
> file_size = 19335882  # toto viem vopred
> req = requests.get(file_url, allow_redirects=True, stream=True)
> block_size = 1024
> num_bars = file_size / (block_size*2)
> bar = Bar(f'Downloading {filename}', max=num_bars,
>   suffix='%(percent).1f%% - %(eta)ds')
> bytes_transferred = 0
> with open(output, "wb") as file:
> for chunk in req.iter_content(chunk_size=block_size):
> bytes_transferred+= len(chunk)
> if chunk:
> file.write(chunk)
>  bar.next()
> bar.finish()
> print(bytes_transferred)
>
> Moje problem: Velkost prenesenych dat nesedi s velkostou suboru (26640760
> vs 19335882 t.j. progress bar nezobrazuje korektny progress) z dovodu, ze
> github namiesto suboru posiela subor zabaleny v json a encodovany v base64.
>
> Workaround by mohol byt, ze ak viem velkost finalneho suboru, pokusim sa
> vypocitat velkost json filu (req.headers.get('Content-Length') v tomto
> pripade na githube nefunguje :-( ). Z neho by som po stiahnuti do pamate
> extrahoval content, dekodoval ho a az potom ulozil... Otazkou je ci nie je
> inteligentnejsi sposob ako to urobit...
>
> PS: moja testovacia url je:
> https://api.github.com/repos/tesseract-ocr/tessdata/git/blobs/b01dab8de8174496a0012bf85296943b3e7c81d7
>
>
> Zd.
>
>
> ___
> Python mailing listpython@py.czhttp://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
>
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] progress bar na stahovanie velkeho suboru z githubu

2018-05-08 Tema obsahu Michal Molhanec

Ahoj,

zkusil bych si říct přímo o binární data:

req = requests.get(file_url, allow_redirects=True, stream=True, 
headers={"Accept": "application/vnd.github.v3.raw"})


Viz https://developer.github.com/v3/git/blobs/#custom-media-types

S requests ani GITem ale nedělám.
Nicméně tohle mi jsem v rychlosti otestoval a fungovalo mi

Zdraví
Michal

Dne 08.05.2018 v 11:01 ZdPo Ster napsal(a):

Ahojte,

viem stiahnut velky subor z z githubu takto:

file_content = requests.get(file_url, allow_redirects=True)
file_data = base64.b64decode(file_content.content)
open(output, 'wb').write(file_data)

Kedze to dlho trva, chcem tam implementovat progressbar a tu zacinaju 
moje problemy ;-). Nasiel som ze by malo fungovat nieco taketo:


file_size = 19335882  # toto viem vopred
req = requests.get(file_url, allow_redirects=True, stream=True)
block_size = 1024
num_bars = file_size / (block_size*2)
bar = Bar(f'Downloading {filename}', max=num_bars,
  suffix='%(percent).1f%% - %(eta)ds')
bytes_transferred = 0
with open(output, "wb") as file:
    for chunk in req.iter_content(chunk_size=block_size):
    bytes_transferred+= len(chunk)
    if chunk:
    file.write(chunk)
 bar.next()
    bar.finish()
print(bytes_transferred)

Moje problem: Velkost prenesenych dat nesedi s velkostou suboru 
(26640760 vs 19335882 t.j. progress bar nezobrazuje korektny progress) 
z dovodu, ze github namiesto suboru posiela subor zabaleny v json a 
encodovany v base64.


Workaround by mohol byt, ze ak viem velkost finalneho suboru, pokusim 
sa vypocitat velkost json filu (req.headers.get('Content-Length') v 
tomto pripade na githube nefunguje :-( ). Z neho by som po stiahnuti 
do pamate extrahoval content, dekodoval ho a az potom ulozil... 
Otazkou je ci nie je inteligentnejsi sposob ako to urobit...


PS: moja testovacia url je: 
https://api.github.com/repos/tesseract-ocr/tessdata/git/blobs/b01dab8de8174496a0012bf85296943b3e7c81d7



Zd.


___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz