Python - Télécharger le fichier à l'aide de requêtes, directement dans la mémoire
L'objectif est de télécharger un fichier à partir d'internet, et de créer un objet de fichier, ou un fichier, comme un objet sans jamais avoir à toucher le disque dur. C'est juste pour ma connaissance, ils veulent savoir si ses possible ou pratique, notamment parce que je voudrais voir si je peux contourner avoir à coder une suppression de fichier ligne.
C'est la façon dont je l'aurais fait normalement télécharger quelque chose sur le web, et de la carte mémoire:
import requests
import mmap
u = requests.get("http://www.pythonchallenge.com/pc/def/channel.zip")
with open("channel.zip", "wb") as f: # I want to eliminate this, as this writes to disk
f.write(u.content)
with open("channel.zip", "r+b") as f: # and his as well, because it reads from disk
mm = mmap.mmap(f.fileno(), 0)
mm.seek(0)
print mm.readline()
mm.close() # question: if I do not include this, does this become a memory leak?
source d'informationauteur Akiva
Vous devez vous connecter pour publier un commentaire.
r.raw
(HTTPResponse
) est déjà un fichier-comme l'objet (il suffit de passerstream=True
):En général, si vous avez un bytestring; vous pouvez l'envelopper comme
f = io.BytesIO(r.content)
afin d'obtenir un fichier objet en forme sans toucher au disque:Vous ne pouvez pas passer
r.raw
àZipFile()
directement parce que l'ancien est un non-adressable fichier.tempfile
pouvez supprimer automatiquement les fichiersf = tempfile.SpooledTemporaryFile(); f.écrire(u.le contenu)
. Jusqu'à ce que.fileno()
méthode est appelée (si certaines api nécessite un fichier réel) oumaxsize
est atteint; les données sont conservées en mémoire. Même si les données sont écrites sur le disque; le fichier est supprimé dès qu'il est fermé.Votre réponse est
u.content
. Le contenu est dans la mémoire. Sauf si vous écrivez dans un fichier, il ne sera pas stocké sur le disque.C'est ce que j'ai fait.