簡體   English   中英

嘗試從python2.7中的boto3模塊獲取CSV文件和S3存儲桶時出現無效的時間戳錯誤

[英]Invalid timestamp error when trying to get CSV file from and S3 bucket using boto3 module in python2.7

我試圖將.csv文件存儲在S3存儲桶中。 CSV編譯器將CSV上載到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

我一直在研究,但似乎無法弄清楚這個問題。 有任何想法嗎?

經過幾天的搜索和調試,我們終於確定了問題的原因。 我們嘗試以JSON格式而不是CSV格式上載文件,並且當我們嘗試在Python中使用boto3下載文件時看到相同的錯誤時,我們會感到驚訝。

我們開始在S3中查看文件本身的屬性(右鍵單擊文件並單擊“屬性”)而不是內容。

我們找到了一個名為元數據的部分,並找到了以下條目:

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

將值的年份更改為2200之后的日期后,一切正常! 我們現在正在調查我們在Node.js中的上傳過程,看看我們如何確保正確設置此值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM