Können Sie upload auf S3 mit einem stream anstatt einer lokalen Datei?

Brauche ich zum erstellen einer CSV und laden Sie Sie auf einem S3-bucket. Da bin ich erstellen, die Datei auf der fliege, es wäre besser, wenn ich könnte schreiben Sie es direkt auf S3-bucket, wie es erstellt wird sondern schreiben die ganze Datei lokal, und dann das hochladen der Datei am Ende.

Gibt es eine Möglichkeit, dies zu tun? Mein Projekt ist in Python und ich bin ziemlich neu in der Sprache. Hier ist, was ich bisher ausprobiert:

import csv
import csv
import io
import boto
from boto.s3.key import Key


conn = boto.connect_s3()
bucket = conn.get_bucket('dev-vs')
k = Key(bucket)
k.key = 'foo/foobar'

fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(io.StringIO(), fieldnames=fieldnames)
k.set_contents_from_stream(writer.writeheader())

Erhielt ich diese Fehlermeldung: BotoClientError: s3 nicht unterstützt chunked transfer

UPDATE: ich habe einen Weg gefunden, um direkt schreiben auf S3, aber ich kann nicht einen Weg finden, deaktivieren Sie den Puffer, ohne tatsächlich löschen der Zeilen habe ich bereits geschrieben. So zum Beispiel:

conn = boto.connect_s3()
bucket = conn.get_bucket('dev-vs')
k = Key(bucket)
k.key = 'foo/foobar'

testDict = [{
    "fieldA": "8",
    "fieldB": None,
    "fieldC": "888888888888"},
    {
    "fieldA": "9",
    "fieldB": None,
    "fieldC": "99999999999"}]

f = io.StringIO()
fieldnames = ['fieldA', 'fieldB', 'fieldC']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
k.set_contents_from_string(f.getvalue())

for row in testDict:
    writer.writerow(row)
    k.set_contents_from_string(f.getvalue())

f.close()

Schreibt 3 Zeilen in die Datei, aber ich bin nicht in der Lage, um Speicher freizugeben, zu schreiben, eine große Datei. Wenn ich auf add:

f.seek(0)
f.truncate(0)

auf die Schleife, dann wird nur die Letzte Zeile der Datei geschrieben wird. Gibt es eine Möglichkeit, Ressourcen freizugeben, ohne das löschen von Zeilen aus der Datei?

InformationsquelleAutor der Frage inquiring minds | 2015-06-24

Schreibe einen Kommentar