читать сжатый CSV из S3 в Python DataFrame - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть корзина в S3 с csv в ней.
В ней нет символов без ASCII.
, когда я пытаюсь прочитать ее с помощью python, она не даст мне.
Я использовал: df = self.s3_input_bucket.get_file_contents_from_s3(path)
, как я недавно использовал во многих случаях в одном и том же сценарии, и получаю: UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 14: invalid start byte.
, чтобы убедиться, что он идет по правильному пути, я поместил еще один простой текстовый файлв той же папке и смог прочитать его без проблем.

Я пробовал много решений, которые я нашел по другим вопросам.только один пример, я видел решение, которое кто-то предложил, чтобы попробовать это:

str = unicode(str, errors='replace')

или

str = unicode(str, errors='ignore')
из этого вопроса: UnicodeDecodeError: кодек «utf8» не может декодировать байт 0x9c
, но как их использовать в этом случае?
это не сработало:

str = unicode(self.s3_input_bucket.get_file_contents_from_s3(path), errors='replace')

1 Ответ

0 голосов
/ 04 февраля 2019

Видимо, я пытался открыть архив в архиве.
после долгих исследований я смог прочитать его во фрейм данных, используя этот код:

import zipfile
import s3fs
s3_fs = s3fs.S3FileSystem(s3_additional_kwargs={'ServerSideEncryption': 'AES256'})

market_score = self._zipped_csv_from_s3_to_df(os.path.join(my-bucket, path-in-bucket), s3_fs)

def _zipped_csv_from_s3_to_df(self, path, s3_fs):
    with s3_fs.open(path) as zipped_dir:
            with zipfile.ZipFile(zipped_dir, mode='r') as zipped_content:
                for score_file in zipped_content.namelist():
                    with zipped_content.open(score_file) as scores:
                        return pd.read_csv(scores)

У меня всегда будет только один CSV-файл внутри zip, поэтому язнаю, я могу вернуться на первой итерации.
однако эта функция перебирает файлы в zip.

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