Ошибка неверной отметки времени при попытке получить CSV-файл и корзину S3 с помощью модуля boto3 в python2.7

Я пытаюсь получить файл.csv, хранящийся в корзине S3. CSV загружается компилятором Mac в корзину S3, и мой код (python 2.7) работает в среде Unix. CSV выглядит так (я включил символ возврата каретки):

Order,Item,Date,Quantity\r
1,34975,8/4/15,10\r
2,921644,3/10/15,2\r
3,N18DAJ,1/7/15,10\r
4,20816,12/12/15,9\r

Мой код для получения файла из корзины s3:

import boto3

def readcsvFromS3(bucket_name, key):
    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name=bucket_name, key=key)
    response = obj.get()
    data = response['Body'].read()

Ошибка происходит на response = obj.get() линия. И ошибка, которую я получаю:

Traceback (most recent call last):
  File "slot.py", line 163, in <module>
    columnNames, rowArray = neo.readcsvFromS3(bucket_name=config.s3bucket, key=config.orde
  File "/home/jcgarciaram/WMSight/wmsight-api/api/utilities/pythonScripts/slotting/neo4jUt
    response = obj.get()
  File "/usr/local/lib/python2.7/dist-packages/boto3/resources/factory.py", line 481, in d
    response = action(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/boto3/resources/action.py", line 83, in __c
    response = getattr(parent.meta.client, operation_name)(**params)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 228, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 481, in _make_api
    operation_model, request_dict)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 117, in make_re
    return self._send_request(request_dict, operation_model)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 144, in _send_r
    request, operation_model, attempts)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 203, in _get_re
    parser.parse(response_dict, operation_model.output_shape)),
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 208, in parse
    parsed = self._do_parse(response, shape)
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 570, in _do_pars
    member_shapes, final_parsed)
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 626, in _parse_n
    member_shape, headers[header_name])
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 226, in _parse_s
    return handler(shape, node)
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 149, in _get_tex
    return func(self, shape, text)
  File "/usr/local/lib/python2.7/dist-packages/botocore/parsers.py", line 380, in _handle_
    return self._timestamp_parser(text)
  File "/usr/local/lib/python2.7/dist-packages/botocore/utils.py", line 344, in parse_time
    raise ValueError('Invalid timestamp "%s": %s' % (value, e))
ValueError: Invalid timestamp "Wed, 16 Jan 48199 20:37:02 GMT": year is out of range

Я исследовал все вокруг, но не могу понять проблему. Есть идеи?

1 ответ

Решение

После нескольких дней поиска и отладки мы смогли окончательно определить причину проблемы. Мы попытались загрузить файлы в формате JSON, а не в формате CSV, и представляем наше удивление, когда мы увидели ту же ошибку при попытке загрузить файл с помощью boto3 в Python.

Затем мы начали смотреть на свойства самих файлов в S3 (щелкните правой кнопкой мыши на файле и выберите Свойства), а не на их содержимом.

Мы нашли раздел "Метаданные" и нашли следующую запись:

Key: Expires / Value: Tue, 15 Jan 48199 02:16:52 GMT.

После изменения года значения на дату, например 2200, все работало нормально! Сейчас мы изучаем наш процесс загрузки в Node.js, чтобы увидеть, как мы можем убедиться, что это значение установлено правильно.

Другие вопросы по тегам