2012-10-02 3 views
1

J'essaie d'ouvrir un fichier dans GAE qui a été récupéré en utilisant urlfetch().Ouvrir un fichier à partir d'urlfetch dans GAE

Voici ce que j'ai jusqu'à présent:

from google.appengine.api import urlfetch 

result = urlfetch.fetch('http://example.com/test.txt') 
data = result.content 
## f = open(...) <- what goes in here? 

Cela peut sembler étrange, mais il y a une très similaire fonction dans le blobstore qui peut écrire data à un blobfile:

f = files.blobstore.create(mime_type='txt', _blobinfo_uploaded_filename='test') 
with files.open(f, 'a') as data: 
    data.write(result.content) 

Comment J'écris data dans un objet fichier arbitraire?

Modifier: Cela aurait dû être plus clair; J'essaie d'urlfetch un fichier et ouvrir result.content dans un objet fichier. Il peut donc s'agir d'un .doc au lieu d'un .txt

Répondre

2

Vous n'avez pas besoin d'ouvrir un fichier. Vous avez reçu les données txt dans data = result.content.

+0

Oui, mais je dois stocker les données de texte dans un fichier objet. Et aussi, si le fichier était un fichier .doc, les données de result.content ne seraient pas simplement du texte brut. – kennysong

+0

Quel objet fichier? Vous pouvez ajouter le contenu (le fichier data = un blob) au blobstore et lui donner le type mime correspondant. De cette façon, je télécharge des images ou un pdf et les enregistre dans le blobstore. Votre fetch reçoit une goutte de données. – voscausa

+0

Je veux dire un objet fichier créé à partir de 'f = open ('text.txt')'. Cela semble stupide, mais j'en ai besoin car je ne mets pas les données dans le BlobStore. (Dans le cas où vous êtes curieux, je passe en 'f' comme paramètre pour un objet gdata.MediaSource) – kennysong

3

Vous pouvez utiliser le module StringIO pour émuler un objet fichier en utilisant le contenu de votre chaîne.

from google.appengine.api import urlfetch 
from StringIO import StringIO 

result = urlfetch.fetch('http://example.com/test.txt') 
f = StringIO(result.content) 

Vous pouvez alors lire() de l'objet f ou utiliser d'autres méthodes d'objets de fichiers comme seek(), readline(), etc.

Questions connexes