2016-03-25 6 views
1

Ich versuche, eine .csv-Datei in einem S3-Bucket zu speichern. Die CSV wird von einem Mac-Compiler in den S3-Bucket hochgeladen und mein Code (Python 2.7) läuft in einer Unix-Umgebung. CSV sieht wie folgt aus (ich habe Wagenrücklaufzeichen enthalten):Ungültiger Zeitstempelfehler beim Versuch, eine CSV-Datei zu erhalten, und S3-Bucket mit boto3-Modul in Python2.7

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 

Mein Code die Datei aus dem s3 Eimer zu bekommen:

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() 

Fehler geschieht auf der response = obj.get() Linie. Und der Fehler Ich erhalte ist:

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 

Ich habe überall auf der Erforschung, aber kann nicht scheinen, um das Problem zu verstehen. Irgendwelche Ideen?

+0

Was gibt der 'date' Befehl im Terminal zurück? – Vor

+0

Datumsbefehle gibt erwarteten Wert von: Di Mar 29 09:06:50 EDT 2016. – Pipo

Antwort

0

Nach Tagen des Suchens und Debuggens konnten wir schließlich die Ursache des Problems feststellen. Wir haben versucht, die Dateien im JSON-Format anstatt im CSV-Format hochzuladen und stellen uns unsere Überraschung vor, als wir den gleichen Fehler beim Herunterladen der Datei mit boto3 in Python sahen.

Wir haben uns dann in S3 die Eigenschaften der Dateien selbst angeschaut (Rechtsklick auf Datei und Klick auf Eigenschaften) und nicht den Inhalt.

Wir einen Abschnitt namens Metadaten und fanden den folgenden Eintrag gefunden:

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

Nach dem Wechsel des Jahres des Wertes zu einem Zeitpunkt wie 2200, funktionierte alles in Ordnung! Wir schauen uns nun unseren Upload-Prozess in Node.js an, um zu sehen, wie wir sicherstellen können, dass dieser Wert korrekt eingestellt ist.