Ich erstelle eine REST-API in Google App Engine (keine Endpunkte), mit der Nutzer eine CSV- oder Tabulator-getrennte Datei hochladen und nach möglichen Duplikaten suchen können. Da es sich um eine API handelt, kann ich <form>
s oder BlobStores upload_url
nicht verwenden. Ich kann mich auch nicht darauf verlassen, einen einzigen Webclient zu haben, der diese API aufruft. Stattdessen senden Benutzer im Idealfall die Datei in der body
der Anfrage.Newlines im POST-Anfragetext entfernt? (Google App Engine)
Mein Problem ist, wenn ich versuche, den Inhalt einer durch Tabulatoren getrennten Datei zu lesen, finde ich, dass alle Newline-Zeichen entfernt wurden, so dass es keine Möglichkeit gibt, den Inhalt in Zeilen aufzuteilen.
Wenn ich den Inhalt der Datei direkt an den Interpreter Python zu überprüfen, ich sehe, dass Tabs und Zeilenvorschübe sind (Ausgang im Beispiel abgeschnitten wird)
>>> with open('./data/occ_sample.txt') as o:
... o.read()
...
'id\ttype\tmodified\tlanguage\trights\n123456\tPhysicalObject\t2015-11-11 11:50:59.0\ten\thttp://creativecommons.org/licenses/by-nc/3.0\n...'
Der RequestHandler
protokolliert den Inhalt der Anforderung Körper So
import logging
class ReportApi(webapp2.RequestHandler):
def post(self):
logging.info(self.request.body)
...
, wenn ich rufe die API in der dev_appserver
über curl
curl -X POST -d @data/occ_sample.txt http://localhost:8080/api/v0/report
ausgeführt wird:
Dies zeigt sich in den Protokollen nach oben:
id type modified language rights123456 PhysicalObject 2015-11-11 11:50:59.0 en http://creativecommons.org/licenses/by-nc/3.0
Wie Sie sehen können, gibt es nichts zwischen dem letzten Wert der Header und dem ersten Datensatz (rights
und 123456
respectively) und das gleiche passiert mit dem letzten Wert von jedem Datensatz und dem ersten der nächsten.
Fehle ich etwas offensichtlich hier? Ich habe versucht, die Daten mit self.request.body
, self.request.body_file
und self.request.POST
zu laden, und keiner scheint zu arbeiten. Ich habe auch versucht, die Content-Type
Werte text/csv
, text/plain
, application/csv
in den Anforderungsheadern, ohne Erfolg anzuwenden. Sollte ich einen anderen Content-Type
hinzufügen?
Danke! Ich versuchte es mit '--data-binary' und es funktionierte wie ein Zauber. – JOT