Доступ к содержимому с разделенными табуляцией значениями, хранящимися в BLOB-объекте GAE, но в режиме универсальной новой строки или эквивалентном - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь прочитать содержимое файла TSV как часть приложения Google App Engine.

Я могу нормально прочитать файл, используя:

f=csv.reader(open(matrixpath, "rU"),dialect='excel-tab')

Однако теперь мне нужно прочитать данные из хранилища BLOB-объектов, используя blobreader:

blob_key = ...
blobdata = blobstore.BlobReader(blob_key)
f=csv.reader(blobdata,dialect='excel-tab')

( Я загрузил копию всего кода, с которым у меня возникла эта проблема, здесь )

Без аргумента rU я получаю новую строку в поле без кавычек:

Ошибка: символ новой строки отображается в поле без кавычек - вам нужно открыть файл в режиме универсальной новой строки?

Я хотел бы либо исправить свой файл, чтобы я не получил эту ошибку, либо эмулировать открытие из хранилища в режиме универсальной новой строки?

Мой файл занимает около 20 МБ, и его сокращенный образец (сценарий по-прежнему не работает) можно найти здесь .

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Я не могу воспроизвести ошибку напрямую из файла примера.Можете ли вы?

Учитывая blob = open('sample-file.tsv', 'rb').read():

  1. reader = csv.reader(blob, dialect='excel-tab') создает около одного миллиарда однобайтовых полей, как и ожидалось.

  2. Подстановка StringIO.StringIO(blob) или blob.splitlines() создает 50 строк в каждой из примерно 10000 столбцов ... похоже, работает правильно.

Если вы не показываете (1) загрузку вашего большого двоичного объектакод (и URL-адрес соответствующих документов) (2) ваш код, который получает ошибку в GAE, дальнейшая помощь не представляется возможной.

0 голосов
/ 10 января 2012

С Загрузите и проанализируйте CSV-файл с помощью «универсальной новой строки» в python на Google App Engine , у меня сработал следующий ответ:

csv.reader(blob.open.read().splitlines())

для чтения отформатированного в Mac файла csv в GNU / Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...