2012-10-02 2 views
1

Я пытаюсь открыть файл в GAE, который был получен с помощью urlfetch().Открыть файл из urlfetch в GAE

Вот что я до сих пор:

from google.appengine.api import urlfetch 

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

Это может показаться странным, но есть очень похоже функция в Blobstore, что может написать data к blobfile:

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

Как Я пишу data в произвольный файловый объект?

Редактировать: Должно быть более ясно; Я пытаюсь urlfetch любой файл и открыть result.content в файле. Так что это может быть .doc вместо .txt

ответ

2

Yoy не нужно открывать файл. Вы получили данные txt в data = result.content.

+0

Да, но мне нужно хранить текстовые данные внутри файла объект. А также, если файл был .doc, тогда данные в result.content были бы не просто обычным текстом. – kennysong

+0

Какой файловый объект? Вы можете добавить контент (данные файла = blob) в blobstore и присвоить ему соответствующий тип mimetype. Таким образом, я загружаю изображения или pdf и сохраняю их в blobstore. Ваша выборка получает блок данных. – voscausa

+0

Я имею в виду объект-файл, созданный из 'f = open ('text.txt')'. Звучит глупо, но мне это нужно, так как я не помещаю данные в BlobStore. (Если вам интересно, я передаю 'f' в качестве параметра для объекта gdata.MediaSource) – kennysong

3

Вы можете использовать модуль StringIO для эмуляции объекта файла, используя содержимое вашей строки.

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

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

Вы можете прочитать() из объекта ф или использовать другие методы объекта файла как искать(), Readline() и т.д.

Смежные вопросы