[英]How to download files directly into an archive?
我想下載多個文件並將它們保存在一個 zip 文件中。
到目前為止,這是我的代碼:
import zipfile
import requests
import os
pics = ['url/1.jpg', 'url/2.jpg', 'url/3.jpg']
dir = '/directory'
with zipfile.ZipFile(dir + '/test.zip', 'w') as my_zip:
for x in range(len(pics)):
fn = dir + '/' + pics[x].split('/')[-1]
r = requests.get(pics[x], allow_redirects=True)
open(fn, 'wb').write(r.content)
my_zip.write(fn, str(x+1) + os.path.splitext(fn)[1])
os.remove(fn)
有沒有更聰明/更清潔/更短的方法來做到這一點。 下載 img,然后將其放入 zip,然后刪除它似乎不必要地復雜。
我認為在這種情況下你應該給你一個臨時文件。
這應該工作:
import requests
import zipfile
import tempfile
pics = ['http://www.princeton.edu/~dancexp/Images/1-XPAlifun.jpg',
'http://www.princeton.edu/~dancexp/Images/1-ExposeJess.jpg',
'http://www.princeton.edu/~dancexp/Images/JessHsurevisedlores.jpg']
picdirname = "mypics"
with zipfile.ZipFile("test.zip", "w") as my_zip:
for pic in pics:
response = requests.get(pic)
if response.status_code == 200:
tmpf = tempfile.TemporaryFile()
tmpf.write(response.content)
tmpf.seek(0)
my_zip.writestr(pic.split('/')[-1], tmpf.read())
tmpf.close()
我認為速度也很重要。 試試這個代碼
import requests, zipfile, os
from multiprocessing.dummy import Pool
directory = 'pics/'
def Save(url):
filename = directory+url.split('/')[-1]
try:
try:
res = requests.get(url)
open(filename, 'wb').write(res.content)
except:
return {'filename': filename, 'status': 'cant crate file.'}
except:
return {'filename': filename, 'status': 'error'}
else:
return {'filename': filename, 'status': 'ok'}
urls = ['https://i.stack.imgur.com/kBVja.jpg',
'https://lh5.googleusercontent.com/-TlrV5ArUF6s/AAAAAAAAAAI/AAAAAAAAAC0/d605oPHpYgc/photo.jpg',
'https://i.stack.imgur.com/ipDCR.png',
'https://i.stack.imgur.com/Zpq5l.jpg']
pool_ = Pool(16) #It depends on your processor and the Internet to increase or decrease it
result = pool_.map(Save, urls)
with zipfile.ZipFile('test.zip', 'w') as zip_file:
for x in result:
if x['status'] == 'ok':
zip_file.write(x['filename'])
os.remove(x['filename'])
print(x['filename'], " + Added to zip file")
else:
print(x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.